Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何用Q嵌套序列?_Javascript_Promise_Q - Fatal编程技术网

Javascript 如何用Q嵌套序列?

Javascript 如何用Q嵌套序列?,javascript,promise,q,Javascript,Promise,Q,我想处理一系列的任务,并在这些任务的一部分完成后以及每项任务完成后立即得到通知。我期望的输出应该是1,2,3-4,5,6-7-8。通过我当前的实现,我得到1,4,7,8-2,5-3,6 函数句柄任务(任务){ var=Q(); var承诺=[] tasks.forEach(函数(任务){ promises.push(函数(){ 返回句柄(任务); }); }); promises.reduce(Q.when,new Q()).then(function()){ //完成了内部大块。 延迟。解决

我想处理一系列的任务,并在这些任务的一部分完成后以及每项任务完成后立即得到通知。我期望的输出应该是
1,2,3-4,5,6-7-8
。通过我当前的实现,我得到
1,4,7,8-2,5-3,6

函数句柄任务(任务){
var=Q();
var承诺=[]
tasks.forEach(函数(任务){
promises.push(函数(){
返回句柄(任务);
});
});
promises.reduce(Q.when,new Q()).then(function()){
//完成了内部大块。
延迟。解决();
});
回报。承诺;
}
函数句柄(t){
var deferred=Q.deferred();
文件。写入(“开始”+t);
延迟(5000)。然后(函数(){
文件。写入(“完成”+t);
延迟。解决();
});
回报。承诺;
}
var=Q();
变量任务=[[1,2,3],[4,5,6],[7],[8];
var承诺=[]
tasks.forEach(函数(任务){
promises.push(函数(){
返回handletask(任务);
});
});
promises.reduce(Q.when,new Q()).then(function()){
//完成所有任务
延迟。解决();
});

我真的不确定您的代码是如何产生任何输出的。您试图使用一个承诺,好像它们被延迟了一样,并且您正在使用
document.write()
,我可以想象这会覆盖您的整个页面

虽然不一定是bug,但您正在使用

所以我不太清楚为什么会有这样的结果,但这里有一个更干净的方法可以产生预期的结果:

函数句柄任务(任务){
var promiseFuncs=tasks.map(函数(任务){
返回函数(){
返回句柄(任务);
};
});
返回promiseFuncs.reduce(Q.when,new Q())。然后返回(function()){
log(“finished”+JSON.stringify(tasks));
});
}
函数句柄(t){
console.log(“启动”+t);
返回Q.delay(5000)。然后(函数(){
控制台日志(“完成”+t);
返回t;
});
}
变量任务=[[1,2,3],[4,5,6],[7],[8];
var promiseFuncs=tasks.map(函数(任务){
返回函数(){
返回handletask(任务);
};
});
promiseFuncs.reduce(Q.when,new Q())

这帮了大忙!感谢您指出我使用了延迟反模式,我不知道这一点,并将重写它以更好地理解正在发生的事情。