在第二个函数完成时,使用promises返回函数导出中的值

时间:2017-09-11 01:48:54

标签: javascript ecmascript-6 es6-promise

我试图在承诺运行函数后返回一个值,一旦所有承诺完成,就像下面的代码一样。

var promises = [];
var userInfo = null;
export function userRunner(userData) {
    userData.forEach(function (obj) {
        let x = fetch(apiURL1)
            .then(function (data) {
                return data.json()
            })
        promises.push(x);

        let y = fetch(apiURL2)
            .then(function (data) {
                return data.json()
            })
        promises.push(y);
    });

    Promise
        .all(promises)
        .then(function (results) {

            return plotChart(results); //How do I return this only when it's done below?

        }).catch(function (error) {
            console.log(error);
        });

}


function plotChart(obj){
    //do some work with userInfo and return userInfo
    return userInfo;
}

基本上所有提取都已完成,Promise.all运行它会调用返回值的plotGraph函数。如何仅在plotGraph完成后返回此值?

我正在使用es6这样的

从另一个js页面调用此函数
import {
    userRunner
} from './graph'

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

您可以从组件中返回承诺链:

export function userRunner(userData) {
    return Promise
        .all(promises)
        .then(function (results) {
            return plotChart(results);
        })
}

然后继续导入文件中的链:

import { userRunner } from './graph'

userRunner(userData).then(function (chartedResults) {})