当返回嵌套在then块中的promise时,将map用于Promise.all返回undefined数组

时间:2019-03-01 23:15:54

标签: javascript arrays function ecmascript-6 promise

我有一个问题。我目前正在学习如何使用Promise,但是遇到了一个问题,经过大量搜索后我仍然找不到答案。我正在尝试使用map获取一个Promise.all中的then块的结果的promise数组。但是,以下方法不起作用,这里出了什么问题?

let promises = myArray.map(result => 
    {
        searchPromise(result.type).then((searchReply) => 
        {
            return processReply(result, searchReply)
        });
    }
);

Promise.all(promises).then(c => console.log(c)); //array of Undefined, but 
                                                 //want to get results from
                                                 //processReply function

2 个答案:

答案 0 :(得分:5)

您的map函数不返回任何内容,仅返回您的then函数:

let promises = myArray.map(result => 
    {
        return searchPromise(result.type).then((searchReply) => 
        {
            return processReply(result, searchReply)
        });
    }
);

或者,忽略注释中的花括号,以强制返回:

let promises = myArray.map(result => 
    searchPromise(result.type).then((searchReply) =>  processReply(result, searchReply)
 ));

答案 1 :(得分:1)

您可能会用undefined填充数组,因为对myArray.map的调用未返回任何内容,因此隐式返回了undefined。假设searchPromiseprocessReply都返回一个Promise,这应该可以工作:

let promises = myArray.map(result => {
  return searchPromise(result.type).then((searchReply) => {
    return processReply(result, searchReply)
  });
});

Promise.all(promises).then(c => console.log(c));