如何在构造函数中调用promise对象来设置属性

lea*_*ode 1 javascript promise

我是 javascript 新手,我需要一些帮助来了解应如何使用 promise(使用 bluebird)。下面是我的代码,我希望构造函数在解析属性后初始化一个属性。

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;
}
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 5

如何确保在承诺解决后返回?

你不能。该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
});
Run Code Online (Sandbox Code Playgroud)

一种是对异步进程使用 promise 。构造函数是同步的。虽然您可以在构造函数中使用承诺,但在承诺解决之前,返回的实例不会被完全初始化。但是您的代码永远不会知道那是什么时候。

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