【发布时间】:2016-07-15 22:48:56
【问题描述】:
Account.findByOwnerID(userID)
.then(function(account) {
return validateTo(account, userID);
})
.then(User.findByUsername(email))
在这种情况下,findByOwnerID 会运行,但只要其中的 Promise.all() 开始运行,findByUsername 就会开始执行,跳过 validateTo。
代码中的一个简单更改就可以按照我的预期进行。
Account.findByOwnerID(userID)
.then(function(account) {
return validateTo(account, userID);
})
.then(function() {
return User.findByUsername(email);
})
使用此代码,findByOwnerID 运行,然后当它解析时,validateTo 运行。解决后,运行 findByUsername。
那么为什么这个行得通而不是上面的那个呢?我理解 Promise 链接的方式是,每个 .then() 都期望得到一个 Promise,当它被解决时,将触发下一个 .then()。
所用函数的一些背景知识(如果需要,我可以提供更多详细信息)
Account.findByOwnerID 和 User.findByUsername 是返回承诺的函数。在这个 Promise 中,他们使用 Promise.all.then(function() {resolve()} 来返回主 Promise 并继续这个链。
validateTo 是一个返回承诺的函数。
【问题讨论】:
标签: javascript promise es6-promise