0

promise と Q を使用するのは初めてです。正しく行っていないと
思います。何か提案をお願いします。

fcall中で使えfcallますか?image[i]forループがあるため、各アイテムがリストpromise関数フローを処理 するようにしたい..

response最初から最後まで、各プロミス関数への入力が必要です。次に、次のフローに渡し、最後にクライアント側に戻ります
が、ループの処理方法がわかりません

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);
});
4

1 に答える 1

1

応答からの画像を同時に処理できる場合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();)。何も返されない場合、失敗はエラーを吸収できるためです。実際にあなたのコードから、画像のいずれかが失敗した場合にエラーで応答するハンドラーが1つあるため、このハンドラー(各画像の失敗を処理する)は必要ないと思います

于 2016-03-21T09:37:44.943 に答える