我可以将本机Promise
对象传递给jQuerywhen
并使其按预期运行吗?
是或否取决于使用的jQuery版本。
- 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>
- 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>