Можно ли передать собственный Promise
объект в jQuery when
и работает ли он должным образом?
Принимает ли jQuery.when нативные объекты Promise?
Ответы (2)
Да, это так. Первый параметр, переданный в then
, — это промис, оттуда мы должны снова вызвать result.then()
, чтобы получить результат промиса.
$.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>
person
Get Off My Lawn
schedule
21.07.2018
Да или нет в зависимости от используемой версии jQuery.
- jQuery ‹3 ... нет ...
$.when()
не будет разворачивать собственное обещание js. Он обрабатывает все, кроме своих собственных Deferred/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 был пересмотрен, чтобы быть (по крайней мере, в этом отношении) совместимым с обещанием /A+ спец.
$.when()
развернет любое обещание/затем, совместимое с Promise/A+, включая собственные обещания js.
// 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>
person
Roamer-1888
schedule
25.07.2018
Promise.all()
, так как его гораздо проще использовать. - person jfriend00   schedule 22.07.2018