我在使用promises时发现了以下用例。我正在编写CoffeeScript以获得简洁,但JavaScript开发人员的阅读应该是直截了当的
getUserName().then (userName) ->
getRelatedCompany(userName).then (relatedCompany) ->
registerConnexion(userName, relatedCompany)
在上面的所有请求都取决于前面的结果。解决这个问题的正确方法是什么:
getUserName().then (userName) ->
getRelatedCompany(userName)
.then (relatedCompany) ->
# in that example, userName would be undefined here but there's less callbackception
registerConnexion(userName, relatedCompany)
编辑:我使用bluebird作为承诺库。
答案 0 :(得分:1)
您可以将promises用作代表值的代理:
username = getUserName()
company = username.then(getRelatedCompany)
// assuming good promise lib, otherwise shim .spread of nest once
connexion = Promise.all([username, company]).spread(registerConnexion)
在蓝鸟中,这更简单,变成:
username = getUserName()
company = username.then(getRelatedCompany)
connexion = Promise.join(username, company, registerConnexion);
因为.join
是为此用例而设计的。