我正在重构一些 promise 代码以使用 async
/await
,除了一件事之外,它的效果很好。
某事 Promise
让您做的就是在您想要的任何地方“注入(inject)”回调。例如:
public DoSomethingAsync() {
return new Promise<void>(done => {
// do some stuff
done();
});
}
或者甚至可能回调被包含在另一个回调中:
public DoSomethingAsync() {
return new Promise<void>(done => {
const somethingDeferred = GetSomethingDeferred();
somethingDeferred.onsuccess = () => {
// some success code
done();
};
});
}
“拒绝”处理程序也存在类似的问题。
有没有办法将它们重构为 async
/await
?或者他们被困在 new Promise...
中阻止?
我认为第一个示例可能可以简化为简单的:
public async DoSomethingAsync() {
// do some stuff
}
因为回调无论如何都会在之后自动调用。但第二个例子似乎更有问题。
最佳答案
Is there a way to refactor these to
async
/await
?
没有。
Or are they stuck wrapped up in a
new Promise...
block?
是的。您需要promisify这些函数是异步的,但不返回已经使用 new Promise 构造函数(或可以缩短重复代码的辅助函数)的 Promise,没有办法解决这个问题。您可以将第二个示例重写为
public async DoSomethingAsync() {
await new Promise<void>((resolve, reject) => {
const somethingDeferred = GetSomethingDeferred();
somethingDeferred.onsuccess = resolve;
somethingDeferred.onerror = reject;
});
// some success code
return …;
}
或者,使用辅助函数:
function toPromise(somethingDeferred) {
return new Promise<void>((resolve, reject) => {
somethingDeferred.onsuccess = resolve;
somethingDeferred.onerror = reject;
});
}
public async DoSomethingAsync() {
await toPromise(GetSomethingDeferred());
// some success code
return …;
}
关于typescript - "Inject"带有异步/等待的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40644599/