具有异步例程的新对象

时间:2016-08-28 07:48:44

标签: javascript node.js promise co

我想实例化一个对象,其中构造函数在返回之前执行异步调用。目的是做异步currying。我正在使用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




1 个答案:

答案 0 :(得分: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()