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()

于 2016-08-28T08:47:43.680 に答える