仅在'Promise.all`完成后才返回响应

时间:2018-06-05 15:47:39

标签: javascript ecmascript-6 promise es6-promise

我正在使用一个名为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

后一段时间后,响应会显示在我的控制台中

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

1 个答案:

答案 0 :(得分: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);
});