【问题标题】:Export the return value of chain promise导出chain promise的返回值
【发布时间】:2019-11-11 20:45:50
【问题描述】:

如何导出多重承诺的返回值。我需要将两个数据从第一个 API 导出到第二个 API 数据。这意味着将第一个数据插入一个数组,然后将第二个数据返回该数组并导出以从另一个 .js 文件中使用。

我试图搜索如何在 then() 方法中返回值。但是当我将导入的文件调用到另一个 .js 文件中时,它会记录 [Promise, Promise, Promise...]

API.js

function getAllData(url) {
    return axios.get(url, {
        headers: {
            "Accept": "application/json; odata=verbose"
        }
    }).then(response => response.data.d.results);
}

function getAllDataVHistory(data) {

    return data.map(i => axios.get(`urltwo?getID${i.Id}`).then(response => {
        return response.data;
    }));
}

export const final = () =>
    getAllData(`urlone`)
    .then(data => getAllDataVHistory(data));

Display.js

import {
   final
} from "./API.js";

final().then(en => {
    // return new Promise((resolve, reject) => {
    //   if (true) {
    //    return resolve(console.log(en));
    //   } else {
    //    return reject("promise failed");
    //   }
    // });
   console.log(en);
});

Console.log 结果

(3) [Promise, Promise, Promise]

【问题讨论】:

  • 即使我删除了 return new Promise 仍然会记录 (3) [Promise, Promise, Promise], @TheReason
  • 没有top-level await,你不能导出结果值,只能导出promise。只需等待导入模块的文件中的承诺。
  • 你想在你的承诺数组上使用Promise.all
  • 但我需要使用第一个 API 的数据,因为 id 在第一个 API 中,例如 data.map(i => axios.get(urltwo?getID${i.Id})@Bergi
  • @junreyd 从第一个 API 获取数据并将其传递到第二个 API 已经开始工作了。您的问题只是getAllDataVHistory 中的一系列承诺。

标签: javascript jquery promise axios es6-promise


【解决方案1】:
return data.map(i => axios.get(`urltwo`)

这将返回一个 promise 数组

由于您使用它来解决一个承诺,您将获得该数组(因此您在日志中看到)。

您需要返回一个单个承诺,以便它被采用。

Use Promise.all(array_of_promises) 创建一个单一的承诺,当数组中的所有承诺都已解决时,该承诺将解决。

【讨论】:

  • 但我需要与urloneurltwo API 通信。要在调用urltwo 之前将ID 从urlone 传递给urltwo,我首先需要从urlone 获取ID。就像 - data.map(i => axios.get(urltwo?getID${i.Id})
  • @junreyd — 那么?这一切都发生在你的问题之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
相关资源
最近更新 更多