【发布时间】:2017-09-29 15:32:57
【问题描述】:
给出使用Promise构造函数的代码
let promise = () => new Promise(resolve => resolve(1));
new Promise((resolve, reject) => {
setTimeout(() => reject("10 seconds exceeded"), 10000);
resolve(promise())
})
.then(data => console.log(data))
.catch(err => console.error(err));
1 记录在console
鉴于使用 jQuery.Deferred 的等效代码,jQuery.deferred 对象记录在 .then(),而不是传递给 jQuery.deferred.resolve 的值
let promise = () => new $.Deferred(dfd => dfd.resolve(1));
new $.Deferred(dfd => {
setTimeout(() => dfd.reject("10 seconds exceeded"), 10000);
dfd.resolve(promise());
})
.then(data => console.log(data))
.fail(err => console.error(err));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
虽然将jQuery.deferred 承诺对象传递给.then() 确实返回预期结果
let promise = () => new $.Deferred(dfd => dfd.resolve(1));
new $.Deferred(dfd => {
setTimeout(() => dfd.reject("10 seconds exceeded"), 10000);
promise().then(data => dfd.resolve(data));
})
.then(data => console.log(data))
.fail(err => console.error(err));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
输出的 jQuery 错误是否与 jQuery 的 Promise 和 specification 实现相关?
【问题讨论】:
-
jQuery 从未实现
Promise -
你用的是什么版本的jQuery?
-
为什么你既解决又拒绝承诺?直接的
resolve将永远获胜。 -
你可以尝试传递一个 jQuery 承诺而不是一个 jQuery deferred 吗?
-
@Bergi stacksn-ps 使用的 jQuery 版本是 3.2.1,虽然 2x 返回相同的结果
标签: javascript jquery promise jquery-deferred