2017-02-04 4 views
2

У меня возникли проблемы с пониманием того, как адаптировать одиночные обещания к цепочке обещаний, которые разрешаются после возврата обоих вызовов API.Создание цепочки обещаний

Как можно переписать код ниже, чтобы быть цепочкой обещаний?

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

Спасибо.

ответ

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 
    }); 
+0

Короткий, простой, простой ответ! +1 –

+0

спасибо, это здорово. – Dotnaught

0

Вы также можете приковать их, возвращая их в цепи, но это не так эффективно, как promise.all() - подход (Это просто сделать это, то, что, то еще что-то и т.д.) Если вы нужен результат api-call 1 для 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); 

    }); 

} 
Смежные вопросы