Как я могу ждать обещание (). Сделано () с машинописью? - PullRequest
0 голосов
/ 10 января 2019

Я знаю, как создать стандартное обещание и использовать async / await для него, но как я могу ждать jquery обещание (). Done () с машинописью?

Ток:

$('#sun').hide('slide', {direction:'right'}, 200).promise().done(function () {
    $('#rain').show('slide', {direction:'left'}, 200).promise().done(function () {
        console.log('ok!');
    });
});

Я хотел бы сделать так, но это не работает:

await $('#sun').hide('slide', {direction:'right'}, 200).promise().done(); 
await $('#rain').show('slide', {direction:'left'}, 200).promise().done();
console.log('ok!');

Ответы [ 2 ]

0 голосов
/ 10 января 2019

A jquery обещание работает так же, как ванильное обещание

Пример того, как это работает, преобразуйте это:

var div = $( "<div>" );
 
div.promise().done(function( arg1 ) {
  // Will fire right away and alert "true"
  console.log( this === div && arg1 === div );
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

к этому:

var div = $( "<div>" );

async function run(){
  const arg1 = await div.promise();
  console.log(arg1 === div );
}

window.onload = run;
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Решение:

await $('#sun').hide('slide', {direction:'right'}, 200).promise(); 
await $('#rain').show('slide', {direction:'left'}, 200).promise();
console.log('ok!');
0 голосов
/ 10 января 2019

Попробуйте удалить вызов done() с окончания вызовов promise(). Не обращая особого внимания на реализацию обещания jQuery, я мог бы представить, что вызов done() без аргумента возвращает undefined или другой нежелательный результат, поэтому вы пытаетесь await undefined.

Попробуйте вместо ответа promise() позвонить:

await $('#sun').hide('slide', {direction:'right'}, 200).promise(); 
await $('#rain').show('slide', {direction:'left'}, 200).promise();
console.log('ok!');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...