【发布时间】:2014-04-27 16:51:04
【问题描述】:
我已经开发 JavaScript 几年了,我完全不理解关于 Promise 的大惊小怪。
看来我所做的只是改变:
api(function(result){
api2(function(result2){
api3(function(result3){
// do work
});
});
});
无论如何我都可以使用像 async 这样的库,比如:
api().then(function(result){
api2().then(function(result2){
api3().then(function(result3){
// do work
});
});
});
哪个代码更多,可读性更低。我在这里没有任何收获,它也不是突然神奇地“平坦”。更不用说必须将事情转换为承诺。
那么,这里的承诺有什么大惊小怪的?
【问题讨论】:
-
On-topic:有一篇关于 Html5Rocks 上的 Promises 的内容非常丰富的文章:html5rocks.com/en/tutorials/es6/promises
-
仅供参考,您接受的答案是相同的旧列表,这些微不足道的好处根本不是承诺的重点,甚至没有说服我使用承诺:/。说服我使用 Promise 的是 Oscar 的回答中描述的 DSL 方面
-
@Esailija 很好,你的 leet 演讲说服了我。我接受了另一个答案,尽管我认为 Bergi 的答案也提出了一些非常好的(和不同的)观点。
-
@Esailija “说服我使用承诺的是奥斯卡回答中描述的 DSL 方面”
-
@monsto:DSL:领域特定语言,一种专门设计用于系统特定子集的语言(例如,用于与数据库对话的 SQL 或 ORM,用于查找模式的正则表达式等)。在这种情况下,“DSL”是 Promise 的 API,如果你按照 Oscar 的方式构建代码,它几乎就像补充 JavaScript 以解决异步操作的特定上下文的语法糖。 Promise 创造了一些惯用语,将它们变成了几乎一种旨在让程序员更容易掌握这种结构的难以捉摸的思维流程的语言。
标签: javascript callback promise q bluebird