【发布时间】:2016-03-21 08:30:55
【问题描述】:
我是新来使用 promise 和 Q,我确定我没有正确使用,
请给我一些建议,
我可以在fcall 中使用fcall 吗?因为有一个 for 循环我想确保每个项目 image[i] 处理一个列表承诺函数流..
我需要从头到尾的response,输入到每个promise函数然后传递到下一个流程结束返回客户端,
但我不知道如何处理循环
var response = {};
Q.fcall(function() {
// validate request ...
return response;
})
.then(function(response) {
// save file
for (var i = 0; i < images.length; i++) {
Q.fcall(function() {
// do something with images[i]
return response;
})
.then(function(response) {
// do something with images[i]
return response;
})
.fail(function(error, response) {
response.error = error;
res.send(response);
})
.done(function(response) {
return response;
})
}
return response; << I want this response append data from above loop if above loop all success, then to next flow save db query, if one fail then res.send(), not execute all after
})
.then(function(response) {
// save db query ...
return response
})
.fail(function(error, response) {
response.error = error;
res.send(response);
}).done(function(response) {
res.send(response);
});
【问题讨论】:
-
目前在图像处理链中从
.done返回的响应不知去向。阅读Q.All。制作一系列承诺(您在for循环中创建的链)并使用Q.All -
感谢您的回复,在图像处理链中,如果使用 q.all 能够做同样的事情,他们需要完成一个然后到下一个?
-
您需要对一张图片进行严格的处理吗?还是只在每张图片上做两件不同的事情?
-
每张图片上有两个不同的东西,但需要先做,然后再做
-
那么我从你的问题中假设你错过了一个概念点。一连串的承诺也是一个承诺。因此,当您执行
Q.fcall.then(process1).then(process2).fail(handleImageError)时,它本身就是一个承诺。并且process1和process2将一个接一个地严格执行(假设它们都没有失败)。现在您可以将它们放入数组中。类似return Q.All(images.map(function(image){ return Q.fcall(process1).then(process2).fail(...)}))
标签: javascript node.js promise q flow-control