javascript - 如何循环promise函数流程控制

标签 javascript node.js promise q flow-control

我刚开始使用 Promise 和 Q,我确信我做得不正确,
请给我一些建议,

我可以在fcall中使用fcall吗?因为有一个 for 循环,我想确保每个项目 image[i] 处理列表 promise 函数流..

我需要从头到尾的响应,输入到每个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);
});

最佳答案

鉴于可以同时处理响应中的图像,您可以使用 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 Q.reject();)。因为如果没有返回,失败可以吸收错误。实际上,从您的代码来看,我认为您不需要这个处理程序(处理每个图像失败),因为如果任何图像失败,将有一个处理程序响应错误

关于javascript - 如何循环promise函数流程控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36126133/

相关文章:

javascript - 具有嵌套 ajax 调用的 jQuery 延迟对象

javascript - 如何自动调整 contenteditable 元素?

javascript - jquery mobile 中的按钮无法按预期工作

Javascript chop HTML 文本

javascript - 响应缓冲区数据在 Node JS 中被 chop

node.js - 使用模拟对使用请求、管道和流的私有(private)方法进行单元测试

node.js - 使用非 http (coap) 的快速路由

javascript - 在 promise 中,回调顺序是否有保证?

javascript - 在 MDX 中查询 GraphQL 返回 TypeError props.data... unifned

javascript - RxJS 仅使用最后一个 promise 的响应