我如何等待带有打字稿的promise()。done()?

时间:2019-01-10 14:00:25

标签: javascript jquery typescript async-await

我知道如何创建标准承诺并对其使用async / await,但是如何使用打字稿等待jquery promise()。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 :(得分:0)

尝试从done()通话的末尾删除promise()通话。如果不专门研究jQuery Promise实现,我会想象没有参数的情况下调用done()会返回undefined或其他无法预期的结果,因此您尝试使用await undefined

尝试等待promise()通话:

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

答案 1 :(得分:0)

jquery promise的工作方式与vanilla promise

相同

有关其工作方式的示例,将其转换为:

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!');