【问题标题】:How can I await promise().done() with typescript?如何使用打字稿等待 promise().done()?
【发布时间】:2019-01-10 22:13:41
【问题描述】:

我知道如何创建标准 Promise 并对其使用 async/await,但我如何使用 typescript 等待 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!');

【问题讨论】:

  • 怎么不行,有没有报错?
  • 不,实际上它适用于 javascript。有一个错误,而不是只有 typescript:Error:(1569, 10) TS2555: Expected at least 1 arguments, but got 0. 不管怎样,删除 done(),现在它可以工作了。
  • 是的,那是 TypeScript 抱怨当你不想传递回调函数时不应该使用 .done() :-)

标签: javascript jquery typescript async-await


【解决方案1】:

尝试从您的 promise() 呼叫的末尾删除 done() 呼叫。如果不专门研究 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!');

【讨论】:

  • IIRC .done() 返回接收者对象(同样的承诺)所以这应该不是问题,但你仍然是对的,应该忽略它。
【解决方案2】:

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 );
});
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

到这里:

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

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

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

解决方案:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-24
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2019-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多