【问题标题】:Return response only after `Promise.all` is complete [duplicate]只有在“Promise.all”完成后才返回响应[重复]
【发布时间】:2018-06-05 15:47:38
【问题描述】:

我正在使用一个名为 request-promise 的库来多次调用 API,以查看类似这样的承诺。

const rp = require('request-promise');

static buildProfileImageObject(personObj) {
    var promiseArr = [];
    var parsedPersonResponseObj = [];

    personObj.searchResult.hits.map(person => {
        let options = {
            method: 'GET',
            uri: `api.com/class/${person.ID}`,
            json: true
        }

        promiseArr.push(rp(options));
    });

    var resultsObj = null
    Promise.all(promiseArr)
        .then((results) => {
            resultsObj = results
            console.log(results)
        }).catch(err => {
            Utils.log("API Call Error", err)
            return Utils.errorResponse();
        });

    console.log("THIS IS AFTER");
    console.log(resultsObj);

    return resultsObj;
}

这完美调用了API,并在console.log(results)被命中时显示所有结果。

我的问题是,当调用此函数时,我得到了 null 的返回值,因为它没有等待 Promise.all 完成。返回显示null

如何等待 Promise 完成然后返回这些结果?

【问题讨论】:

  • 返回一个承诺,在调用者中使用.then
  • 嘿@jonrsharpe 你能在下面提供一个样本作为答案吗?谢谢!

标签: javascript ecmascript-6 promise es6-promise


【解决方案1】:

您的函数还需要返回一个 Promise(或者如果您的堆栈支持,则为 async 函数,但我假设它不支持)。

const rp = require('request-promise');

static buildProfileImageObject(personObj) {
    const promises = personObj.searchResult.hits.map(person => rp({
        method: 'GET',
        uri: `api.com/class/${person.ID}`,
        json: true
    }));

    return Promise.all(promises).catch(err => {
        Utils.log("API Call Error", err)
        return Utils.errorResponse();
    });
}

然后你会像这样使用它

Something.buildProfileImageObject(person).then((results) => {
   console.log(results);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2023-02-23
    • 2017-01-03
    • 2019-08-13
    • 2015-03-27
    • 2020-10-09
    • 1970-01-01
    相关资源
    最近更新 更多