Javascript 具有延迟对象的构造函数

Javascript 具有延迟对象的构造函数,javascript,Javascript,我试图充分利用$.Deferred()来控制异步函数的结束。我还想从函数返回一些信息 我设置了这样的东西 var VideoInputOk2Start = new VideoInputStart(); $.when(VideoInputOk2Start.Control).done(function () { console.log("SetUpVideoOK") }); function VideoInputStart() { this.Control = $

我试图充分利用$.Deferred()来控制异步函数的结束。我还想从函数返回一些信息

我设置了这样的东西

var VideoInputOk2Start = new VideoInputStart();
    $.when(VideoInputOk2Start.Control).done(function () { console.log("SetUpVideoOK") });


    function VideoInputStart() {
        this.Control = $.Deferred();
        this.Ok = false;

if ( videoInput.paused == true ) {
    videoInput.play();
    this.Control.resolve();
    this.Ok = true;
}
    }
这种方法正确吗?还是有更简单的?或者我在检查VideoInputK2Start.Control时出错,因为它可能尚未由构造函数创建。 一些比赛条件错误(不管怎样,这让我很惊讶)


谢谢

在您列出的代码中,在完成任何工作之前,您的承诺已得到解决。据推测,某些异步函数要么接受回调函数,要么返回承诺。您承诺的解析器正在运行,就好像代码将在不会发生的“异步”函数上等待一样(除非您使用生成器或某种类似方法)。相反,在下面你可以看到一些你可以使用的结构

函数构造函数(url){ this.OK=false;//这对于承诺有些不必要,因为您可以检查承诺的状态 this.Control=fetch(url)//返回承诺的异步函数 .then(函数(res){//解析器函数 this.OK=true;//承诺完成后设置OK }.bind(this));//将“this”绑定到匿名函数 log('构造函数已完成运行'); } var x=新的构造函数('http://i.imgur.com/63xpOZkb.jpg'); x、 控制。然后(功能(res){ log(“我只在异步工作完成后运行”); 文件。写入(“已完成下载”); });
log(“我在声明解析函数后运行”)“因为它可能不会被创建”是什么让你这么说的?它是在构造函数中分配的-不应该创建它?我在考虑一些竞争条件,即在构造函数之前调用$.when(VideoInputOk2Start.Control),无论您在
///async work
上运行什么,都应该有回调或承诺。承诺将链接到解析器,然后在解析器函数中解析“控制”承诺。如果使用回调,您将在回调中解析承诺。否则,在当前结构中完成工作之前,您当前正在解决您的承诺。另外,如果您确实在那里使用了承诺,那么最好将
this.Control
设置为等于从该函数返回的任何承诺。您不需要定义它。Control有一个延迟对象吗?fetch是一个返回承诺的函数。因此,是的,在上面的示例中,从“fetch()”返回的延迟对象(promise)是定义“this.Control”属性的对象。您也可以使用$.get。Jquery提供了一些承诺,您可以将其与其他库一样使用。承诺现在也是标准的一部分,但并非在所有浏览器中都实现。我会建议你尽可能坚持使用标准的东西,但这取决于你需要什么以及你想如何使用它。