【发布时间】:2015-02-27 04:45:10
【问题描述】:
有什么区别:
new Promise(function(res, rej) {
res("aaa");
})
.then(function(result) {
return "bbb";
})
.then(function(result) {
console.log(result);
});
还有这个:
new Promise(function(res, rej) {
res("aaa");
})
.then(function(result) {
return Promise.resolve("bbb");
})
.then(function(result) {
console.log(result);
});
我在问,因为我使用 Angular 和 $http 服务与链接 .then() 获得了不同的行为。代码有点多,所以先看上面的例子。
【问题讨论】:
-
你看到了什么“不同的行为”?这两个示例都应该工作并且行为大致相同。第二个示例中的
Promise.resolve()是不必要的。 -
@pixelbits 从
then处理程序返回承诺没有任何问题,事实上,这是承诺规范的一个关键方面,您可以这样做。 -
在第 2 行为什么你必须调用 res("aaa"),为什么不能返回 "aaa" 就足够了,并且 Promise 捕获 resolve() 的方式与它捕获的相同拒绝()的例外?
-
@SamLiddicott 有同样的问题,而地雷有点复杂:
new Promise((res, rej) => { return fetch('//google.com').then(() => { return "haha"; }) }).then((result) => alert(result));这个代码只会挂起(不会永远解决)。但是,如果我将return "haha";更改为return res("haha");,那么它将起作用并提醒“哈哈”。 fetch().then() 不是已经将“haha”包装成一个已解决的承诺了吗? -
@ShaungCheng 如果你使用 Promise 构造函数,你应该调用传递的函数的
res参数而不是返回结果。返回传递给 Promise 构造函数的函数内部的任何内容都将被忽略
标签: javascript angularjs promise q