typescript - "Inject"带有异步/等待的回调

标签 typescript callback promise async-await

我正在重构一些 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/

相关文章:

javascript - 如何将本地文件读入字符串

Angular 6 - 行为主题 : get data to stay after refresh

typescript - TypeScript 条件类型的映射与受约束的泛型不同吗?

Javascript:重复调用 Promise 直到返回所需结果并随后触发事件?

angular - 什么是 Angular 中访问 DOM 元素的 `link` 函数的等价物

javascript - 在javascript中将回调函数设置为新窗口

javascript - jQuery 多个 animate() 回调

android - weakreference vs eventbus以避免内存泄漏android?

angularjs - 将回调转化为 promise

javascript - 如何在函数注释中描述返回的 promise ?