2016-10-03 75 views
1

我是javascript新手,我需要一些帮助来了解如何使用承诺(使用蓝鸟)。下面是我的代码,我希望构造函数在属性解析后初始化属性。如何在构造函数中调用承诺对象以设置属性

var getCookie = function(object, someParams) { 
    return connect(someParams) 
    .then(function(response){ 
     self.cookie = response.cookie;//this should be done as part of object initialization. 
     done(); 
    }); 
} 

var app = function(){ 
    var self = this; 
    getCookie(self); 
    //how to make sure that return happens after promise is resolved? 
    return self; 
} 

回答

3

如何确保收益情况承诺解决后?

你不行。在承诺解决之前,app函数将返回。这甚至可以通过JavaScript保证。

如何调用对象的承诺在构造函数中设置属性

你不知道。

相反,您可以使用类似于工厂方法的方法创建类的新实例,并返回解析为实例的promise。

实施例:

function getCookie(someParams) { 
return connect(someParams) 
    .then(function(response){ 
    return response.cookie; 
    }); 
} 

function App() {} 

function getApp() { 
    var app = new App(); 
    return getCookie(params) 
    .then(function (cookie) { 
     app.cookie = cookie; 
     return app; 
    }); 
} 

// Usage 

getApp().then(function(app) { 
    // use app 
}); 

One使用许诺为异步过程。构造函数是同步的。虽然可以在构造函数中使用promise,但在解析promise之前,将不会完全初始化返回的实例。但是你的代码永远不会知道这是什么时候。

这就是为什么有一个工厂方法返回一个承诺,如果更可靠的方式解析为类实例。

+0

我试过这种方法,发生的事情是,应用程序正在返回没有设置cookie。它在某段时间后被设置..我们如何确保它在完成承诺之前不会返回?我们是否必须添加承诺监视器?我明白,这听起来更像是同步编程,但我只使用返回承诺 – learningtocode

+0

然后你没有做我在我的答案建议。这是一个假的'connect'实现:https://jsfiddle.net/yqu5szLb/。 “*我们是否必须添加承诺监视器?”*否。承诺已经解决了这个问题。传递给'getApp()。然后(...)'的回调函数仅在* app.cookie = cookie后发生。 –

相关问题