【发布时间】:2017-03-13 14:04:30
【问题描述】:
我已经习惯于承诺链式数组。当每个承诺都是一行时,阅读承诺链非常容易,例如
myArray.map(x => convertX)
.filter()
.whatever()
.etc()
这非常容易阅读。但是,当我使用自定义函数创建承诺链时,它变得更加混乱。
database.query(first query)
.then(results => {
// do stuff
// do more
// even more
return database.query(second query)
})
.then(results => {
// rinse and repeat
})
.catch(err => {
// error handling
})
现在,这可能是清晰的,但是当 Promise 链进一步扩展时,它会变得有点多。如果我让每个承诺都有自己的功能,那么我可以简化流程,使代码看起来像这样(imo,它的可读性提高了 1000 倍)。
db.query(first query)
.then(storeFirstQuery)
.then(secondQueryAndStoreIt)
.then(thirdQueryAndStoreIt)
.catch(errHandlingFunction)
这样,我可以重新排列函数,而无需操作从一个 Promise 传递到下一个 Promise 的值。如果一个 Promise 使用另一个的结果,它只需要在另一个之后,而不是紧随其后。这样我就可以在任何需要的地方偷偷做出承诺。
但是,这需要我的 Promise 链使用每个 Promise 范围之外的变量。有没有一种行之有效的方法来做到这一点?
编辑 - 似乎 async/await 是最好的方法,但我在 Heroku 上运行 Node 并且它还不支持:/
【问题讨论】:
-
您不是第一个似乎喜欢您选择的方法的人。我不知道,因为它是易读的英语,而不是易读的 JavaScript。这是"callback lite"。
标签: javascript node.js es6-promise