我知道如何创建标准承诺并对其使用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!');
答案 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!');