0

我想实例化一个对象,构造函数在返回之前执行异步调用。目的是进行异步柯里化。我正在使用co。以下示例失败。我究竟做错了什么?

var co = require('co')

function asyncFunction() { 
  return new Promise(function (resolve) {
    resolve()    
  })
}

function MyObject () {
  co(function * () {
    yield asyncFunction()
  }).then(()=> {
    this.runSomething = function() {
      return 'something'
    }
  })
}

new MyObject().runSomething()
// TypeError: (intermediate value).runSomething is not a function

4

1 回答 1

2

运算符new总是会立即同步地返回一个对象。您不能延迟该操作。

您可以改为创建一个函数,该函数将为您的对象返回一个 Promise。

function makeObjectAsync() {
  const asyncResult = asyncOperation();
  return asyncResult.then(result => ({
    runSomething() { /* ... */ }
  }));
}

myObjectAsync()
  .then(obj => {
    // obj is ready to use.
    return obj.runSomething();
  });

您可以将其与co相当容易地结合起来阅读一些.then()s.

于 2016-08-28T08:47:43.680 回答