2016-07-08 3 views
1

私はrequest-promiseモジュールを使用しており、リクエストの連鎖方法については言及していません。私は現在の彼らの構文を次のようだ:私は他の呼び出しを続行、その後Promise.allを使用して、同時に複数の呼び出しを行うと、すべて解決するには、それらを待ちしようとすることができるようにしたいしかしBlueBird/Request-Promiseを使用したリクエストの連鎖

request({options}) 
    .then(function(result){...}) 
    .catch(function(error){...}) 

。たとえば、私はしたい:

  1. ユーザーを作成する1つのアプリケーションを呼び出します。
  2. 同じ時刻に、アドレスを作成する呼び出しを行います。
  3. Promise.all([UserCall、AddressCall])。then({結果を処理する関数))?

また、私はmodule.exports = {...}の関数を使って作業しています。これは、私が輸出国の外にいることと、別々の変数として宣言することを必要としますか?

var UserCall = function(req,res){ 
    return new Promise(function (resolve, reject){ 
    request({options})? //To make the call to create a new user? 
    // Then something with resolve and reject 

すべてのヘルプははるかに高く評価されています。私は私のような何かを持っているかのようにそのようだが理解し何から

。私は基本的なBlueBirdのコンセプトを混ぜ合わせて、それらを要求約束と共に使用しようとしていると思う。

+0

はい、ちょうど([、要求({...})リクエスト({...})]) 'Promise.allを使用し'。何が問題なのですか?何を試しましたか? – Bergi

+0

いいえ、 'request(...)'がすでに約束を返す場合は、 'new Promise'コンストラクタを使用しないでください。 – Bergi

+0

' Promise.all([request({...})、request({...})])を使って試しました。次に(関数(結果){...}) '。しかし何らかの理由で2つのリクエストからnullまたは未定義の結果が得られています。私はいくつかのコンソールログを作成し、.then関数が結果が戻ってくるのを待っていないかのように思えます。 '要求({...})ごとに' .then(関数(結果){戻り結果}) 'を入れるはずですか? – Jeff

答えて

-1

あなたが言ったように、これはall APIを使用して実行できます。

こちらのドキュメントを参照してください:http://bluebirdjs.com/docs/api/promise.all.html

例:

var self = this; 
    return new Promise(function(resolve) { 
     Promise.all([self.createUser, self.createAddress])done(
      // code path when all promises are completed 
      // OR should any 1 promise return with reject() 
      function() { resolve(); } 
     ); 
    }) 

コードで述べたように、中に定義された約束のいずれか1、.all()コールバックコードパスが同様に呼び出されますpromisesが拒否されます。ここで

+0

@Bergiは言ったように、新しい約束をするべきではありません。 – Arnial

+0

私は現在 'Promise.all([request({...})、request({...})を実行しています。上記の私のコメントに記載されているように、2つのリクエストからnullまたは未定義の再解析を実行しています。 – Jeff

+0

'Promise.all'は複数のパラメータではなく配列をとる – Bergi

2

あなたが行く:

var BPromise = require('bluebird'); 
var rp = require('request-promise'); 

BPromise.all([ 
    rp(optionsForRequest1), 
    rp(optionsForRequest2) 
]) 
    .spread(function (responseRequest1, responseRequest2) { 
     // Proceed with other calls... 
    }) 
    .catch(function (err) { 
     // Will be called if at least one request fails. 
    }); 
関連する問題