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

答案 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()
。