创建一系列承诺

时间:2017-02-04 21:25:03

标签: javascript node.js

我无法理解如何将单个Promise调整为一系列Promise,一旦两个API调用都返回,它就会解析。

如何将下面的代码重写为Promises链?



function parseTweet(tweet) {  
  indico.sentimentHQ(tweet)
  .then(function(res) {
     tweetObj.sentiment = res;
     }).catch(function(err) {
    console.warn(err);
  });

  indico.organizations(tweet)
  .then(function(res) {
     tweetObj.organization = res[0].text;
     tweetObj.confidence = res[0].confidence;
     }).catch(function(err) {
    console.warn(err);
  });
}




感谢。

2 个答案:

答案 0 :(得分:5)

如果您希望同时运行调用,则可以使用Promise.all

Promise.all([indico.sentimentHQ(tweet), indico.organizations(tweet)])
  .then(values => {
    // handle responses here, will be called when both calls are successful
    // values will be an array of responses [sentimentHQResponse, organizationsResponse]
  })
  .catch(err => {
    // if either of the calls reject the catch will be triggered
  });

答案 1 :(得分:0)

您也可以通过将它们作为链返回来链接它们,但它不如promise.all() - 方法那样有效(这只是这样做,然后是其他的等等)如果你需要结果api-call 1 for api-call 2这将是要走的路:

function parseTweet(tweet) {

  indico.sentimentHQ(tweet).then(function(res) {

    tweetObj.sentiment = res;

   //maybe even catch this first promise error and continue anyway
  /*}).catch(function(err){

     console.warn(err);
     console.info('returning after error anyway');

     return true; //continues the promise chain after catching the error

 }).then(function(){

  */
    return indico.organizations(tweet);


  }).then(function(res){

     tweetObj.organization = res[0].text;
     tweetObj.confidence = res[0].confidence;

  }).catch(function(err) {

     console.warn(err);

  });

}