【发布时间】:2017-07-24 16:53:24
【问题描述】:
我正在使用纯 JavaScript。对于数组的每个元素,我有 3 个任务要做。我为每个元素创建了 Promise,每个元素都承诺为每个元素完成任务。现在在每一个里面,我要做出 3 个承诺,每个任务一个。
processElement=processArrayElementFunction(matrix);
unique.forEach(function (number,index)
{
promises.push(new promiseToProcessElement(index,number,processElement,matrix));
});
Promise.all(promises).then((results) => {console.log(results);});
function promiseToProcessElement(id,num,callbackProcessElement,matrix)
{
return new Promise((resolve, reject) => {
resolve(callbackProcessElement(id, num,matrix););
});
}
function processArrayElementFunction(matrix)
{
return function(index, number)
{
var promises=[];
promises.push(new promiseTask(index,sumRC,matrix));
promises.push(new promiseTask(index,sumAround,matrix));
promises.push(new promiseTask(number,repetitions,matrix));
Promise.all(promises).then((results) => {
return results;
});
};
}
function promiseToProcessElement(id,num,callbackProcessElement,matrix)
{
return new Promise((resolve, reject) => {
resolve(callbackProcessElement(id, num,matrix););
});
}
function promiseTask(num,callbackTask,matrix)
{
return new Promise((resolve,reject)=>
{
resolve(callbackTask(num,matrix));
});
}
sumRC,sumAround,repetitions 只是完成任务的一些函数。它们并不重要。
现在function promiseToProcessElement 中的var result=callbackProcessElement(id, num,matrix); 是undefined。
我认为问题在于,因为程序需要这个结果,而没有完成每个元素的 3 个任务。这是真的?我该如何解决?
【问题讨论】:
-
您介意剥离您的代码吗?它很难阅读并且缺少一些大括号。
-
我建议您更仔细地阅读有关 Promise 的内容...您所有的 Promise 都会同步调用 resolve...您可以将它们全部删除,它会做同样的事情。您需要使用 then 并返回 Promise,以便您可以链接。
-
@TheRickest 我剥离了代码。你能帮我吗?
-
@Salketer 你有什么建议?
标签: javascript nested asynccallback