具有异步例程的新对象
new object with async routines
我想实例化一个对象,构造函数在返回之前执行异步调用。目的是进行异步柯里化。我正在使用 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
A new
运算符将始终 return 一个对象立即同步。您不能延迟该操作。
您可以改为创建一个函数,该函数将为您的对象return一个 Promise。
function makeObjectAsync() {
const asyncResult = asyncOperation();
return asyncResult.then(result => ({
runSomething() { /* ... */ }
}));
}
myObjectAsync()
.then(obj => {
// obj is ready to use.
return obj.runSomething();
});
您可以很容易地将它与 co
结合起来阅读一些 .then()
。
我想实例化一个对象,构造函数在返回之前执行异步调用。目的是进行异步柯里化。我正在使用 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
A new
运算符将始终 return 一个对象立即同步。您不能延迟该操作。
您可以改为创建一个函数,该函数将为您的对象return一个 Promise。
function makeObjectAsync() {
const asyncResult = asyncOperation();
return asyncResult.then(result => ({
runSomething() { /* ... */ }
}));
}
myObjectAsync()
.then(obj => {
// obj is ready to use.
return obj.runSomething();
});
您可以很容易地将它与 co
结合起来阅读一些 .then()
。