如果需要第二个promise,则如何解决第二个promise?

时间:2019-08-14 20:47:21

标签: javascript node.js recurly

我有2个函数getAccountInfo()和getAdjustmentsInfo(accountInfo),它们都返回一个新的Promise。唯一的不同是第二个功能需要第一个功能返回的信息。

我试图先声明这2个函数,然后使用then()逐个调用它们。它起作用了,但问题是,第二个功能需要第一个承诺的结果。

不仅如此,第一个承诺还返回了一个数组,例如一个包含10个帐户信息的数组。但是第二个功能只需要帐户信息的属性,例如account_code。

所以我认为我需要运行第二个功能10次。我不太确定该怎么做。

这些是函数,如您所见,第二个函数需要第一个accountInfo对象的account_code:

DerivedUnit

这是调用函数的控制器代码:

function getAccountInfo() {
    return new Promise((resolve, reject) => {
        getAccountCallbackFunc((errResponse, response) => {
            if (errResponse) {
                return reject(errResponse);
            }
            resolve(response);
        });
    });
}

function getAdjustmentsInfo(accountInfo) {
    return new Promise((resolve, reject) => {
        getAdjustmentCallbackFunc(accountInfo[0].account_code, function (errResponse, response) {
            if (errResponse) {
                reject(errResponse);
            }
            if (response) {
                resolve(response);
            }
        });
    });
}

我将第二个函数更改为如下所示,下面是我更改为的代码,因此它可以循环:

var accountInfo = {};
var adjustmentsInfo = {};

getAccountInfo()
    .then(response => {
        accountInfo = response.data.accounts.account;
        getAdjustmentsInfo(accountInfo)
    })
    .then(response => {
        adjustmentsInfo = response.data.adjustments;
    })
    .catch(err => console.log(err));

因此,我首先运行getAccountInfo()函数,然后首先运行then(),以将帐户信息保存到外部变量accountInfo。 接下来,我运行第二个then()试图将accountInfo传递给第二个函数,第二个函数将循环运行内部getAdjustmentCallbackFunc()多次以​​创建新结果并对其进行解析。我不知道为什么它不起作用。那是我所缺少的吗?请让我知道。

1 个答案:

答案 0 :(得分:1)

getAccountInfo()
.then(info => {
  return Promise.all(info.accounts.map(a => getAdjustmentsInfo(a)));
})
.then(adjustments => {
  // array of 10 adjustments
})