如何使用jQuery承诺执行后台任务?

时间:2018-01-23 12:24:25

标签: javascript jquery asynchronous jquery-deferred

我有一个很长的同步函数,我想用jQuery.when和/或jQuery.Deferred()来实现它。

我挣扎着,没有找到任何例子!

示例(打字稿):

public Bind(cell: number) {
    console.log("entering!");
    $.when(this.validateCell(cell)).done( () => {
        console.log("finished!");
    });
    console.log("out!");
}

private validateCell(cell: number): JQueryPromise<any> {
    const dfd = $.Deferred();
    console.log("0");
    for (let i = 0; i < 1000000000; i++) {
        const t = i;
    }
    console.log("1");
    dfd.resolve();
    return dfd.promise();
}

我明白了:

entering!
0
1
finished!
out!

虽然我想得到这个:

entering!
out!
0
1
finished!

提前谢谢!

2 个答案:

答案 0 :(得分:0)

  

如何使用jQuery承诺执行后台任务?

你做不到。使用promise不会改变完成工作的线程,只有(可能)完成时才会完成。

如果您希望它在后台运行,则需要将其卸载到网络工作者(specMDN)。

答案 1 :(得分:-2)

尝试添加setTimeout

 private validateCell(cell: number): JQueryPromise<any> {
        const dfd = $.Deferred();
        console.log("0");
        setTimeout(function(){
           for (let i = 0; i < 1000000000; i++) {
               const t = i;
           }
         })
        console.log("1");
        dfd.resolve();
        return dfd.promise();
    }