2016-04-14 14 views
0

私はkriskowal qの実装を使用しています。データの配列を持つ連続した約束チェーン、約束を解決する方法?

私はIDを持つデータオブジェクトの配列を持っています。

レートリミットのルールを1秒あたり1リクエストに設定しているため、これらを連続して約束する必要があります。

しかし、私は約束を解消するのに苦労しています。私。最初のビデオでは、addVideo、getInfo、retryIfNeededと1秒の遅延の出力がありますが、それ以降のビデオでは表示されません。

私がやりたいことは、遅延の後に、そのチェーンを解決して、次の約束事のリストが2番目のビデオIDに続くことです。

どうすればよいですか?私は間違って何をしていますか?あなたが何かを解決する必要はありませんhttp://jsfiddle.net/gpa7ym18/4

var promiseChain = data.items.reduce(function(promise, video) { 
    video.type = type; 
    return promise 
     .then(addVideo) 
     .then(getInfo) 
     .then(retryIfNeeded) 
     .then(function() { 
      return q.delay(1000) 
        .done(function() { 
         NEED TO RESOLVE HERE but there is NO Defered object 
         to set defer.resolve. How do I resolve this promise chain? 
        }); 
     }); 
    }, q.resolve(data.items[0])); 
+1

ちょうどいつものように「復帰」ですか?しかし、 'それは'決して 'done'を使用しないでください。 – Bergi

+0

しかし、私は最後の.thenと.doneを削除しようとしましたが、解決しませんでした –

+0

q.resolve(data.items [0])を使用しているためです –

答えて

1

:私は何か提案が編集jsfiddleを追加

歓迎されているGoogleで多くのことを検索したが、解決策を見つけていません。

遅延した約束を返すだけで、チェーン全体の価値になります。
これは、プロミスチェーンがどのように機能するかを正確に示しています。

+0

あなたが私のコメントを見て、あなたが私を助けることができるかどうか見てみることができますか?私は配列の各オブジェクトに対して基本的に配列の約束と連鎖を使って動作させたいと考えています –

+0

@Chowza:あなたの関数に 'video'をバインドする必要があります:' .then(addVideo.bind(null、video)) ' 。 http://blog.slaks.net/2015-06-10/advanced-promise-usage/ – SLaks

+0

を読んで、これを受け入れると、bergiのコメントが私のこの問題への回答に役立ちました。 http://jsfiddle.net/gpa7ym18/8/私の解説 –

関連する問題