如何循环承诺功能流控制
How to loop promise function flow control
我是 promise 和 Q 的新手,我确定我做的不正确,
请给我一些建议,
我可以在 fcall
中使用 fcall
吗?因为有一个 for 循环我想确保每个项目 image[i]
处理一个列表承诺函数流..
我需要 response
从头到尾,输入到每个 promise 函数然后传递给下一个流程,最后 return 到客户端,
但我不知道如何处理循环
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);
});
鉴于可以同时处理来自响应的图像,您可以使用 Q.All
来确保所有图像都被成功处理
Q.fcall(verifyRequest)
.then(function(){
return Q.All(images.map(function(image){
return Q.fcall(process1)
.then(process2)
.fail(handleImageError)
}));
})
.then(saveToDB)
.fail(handleRequestError)
现在您所要做的就是正确实现功能,确保数据流正确。
确保 handleImageError
您 return 拒绝 (return Q.reject();
)。因为 fail 可以吸收错误,如果没有 returned。实际上,从您的代码来看,我认为您不需要此处理程序(处理每个图像失败),因为如果任何图像失败,将会有一个处理程序将响应错误
我是 promise 和 Q 的新手,我确定我做的不正确,
请给我一些建议,
我可以在 fcall
中使用 fcall
吗?因为有一个 for 循环我想确保每个项目 image[i]
处理一个列表承诺函数流..
我需要 response
从头到尾,输入到每个 promise 函数然后传递给下一个流程,最后 return 到客户端,
但我不知道如何处理循环
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);
});
鉴于可以同时处理来自响应的图像,您可以使用 Q.All
来确保所有图像都被成功处理
Q.fcall(verifyRequest)
.then(function(){
return Q.All(images.map(function(image){
return Q.fcall(process1)
.then(process2)
.fail(handleImageError)
}));
})
.then(saveToDB)
.fail(handleRequestError)
现在您所要做的就是正确实现功能,确保数据流正确。
确保 handleImageError
您 return 拒绝 (return Q.reject();
)。因为 fail 可以吸收错误,如果没有 returned。实际上,从您的代码来看,我认为您不需要此处理程序(处理每个图像失败),因为如果任何图像失败,将会有一个处理程序将响应错误