jQuery.when接受本机Promise对象吗



我可以将本机Promise对象传递给jQuerywhen并使其按预期运行吗?

是或否取决于使用的jQuery版本。

  1. jQuery<3.不$.when()不会打开本机js Promise。它对待自己的Deferreds/Promises之外的任何东西的方式与对待任何其他对象/值的方式相同

// using jQuery 2.1.1
$.when(Promise.resolve('xxxyyy')).then(result => {
console.log(result);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

  1. jQuery 3+。。。对在第3版中,jQuery被修改为(至少在这方面(符合Promise/A+规范。$.when()将打开任何与Promise/A+兼容的Promise/tenable,包括js原生Promises

// using jQuery 3.1.1
$.when(Promise.resolve('xxxyyy')).then(result => {
console.log(result);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>

是的。传递给then的第一个参数是promise,从那里我们必须再次调用result.then()才能获得promise的结果。

$.when(new Promise(resolve => {
setTimeout(() => resolve('abc123'), 2000)
})).then(result => result.then(data => console.log(data)))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

最新更新