当前位置: 首页 > 知识库问答 >
问题:

如何编写更好的Async/Await+promise代码?

邓禄
2023-03-14

这就是它看起来的样子。

function async doAction() {
    await this.waitForData();
    // do some other things after data loads
    // when data loads it's available in this.data
}

function waitForData() {
    if (!this.promise) {
        this.promise = new Promise(res => this.promiseResolve = res);
        return this.promise;
    }
    else {
        return Promise.resolve(this.data);
    }
}

function loadData(data) {
    //some things
    this.data = data;

    if (this.promiseResolve) {
        this.promiseResolve(this.data);
    }
}

它工作得很好,doaction等待数据加载,然后开始操作。但这是相当多的代码,有没有更好的方法来做它?

共有1个答案

虞华翰
2023-03-14

有一些错误与并发调用或调用的意外顺序。我愿意

function waitForData() {
    if (!this.promise) {
        this.promise = new Promise(res => this.promiseResolve = res);
    }
    return this.promise;
}

function loadData(data) {
    //some things
    this.data = data;

    if (this.promiseResolve) {
        this.promiseResolve(this.data);
        this.promiseResolve = null;
    } else {
        this.promise = Promise.resolve(this.data);
    }
}

但除此之外,是的,这是通过承诺连接两个独立事物的方法。

 类似资料:
  • 本文向大家介绍你是如何更好地处理Async/Await的异常的?相关面试题,主要包含被问及你是如何更好地处理Async/Await的异常的?时的应答技巧和注意事项,需要的朋友参考一下 @HCLQ 玩node时。。他那么写还是比较常见的。。 你是指 callback 中使用的 error-first 的错误处理方式吗? 这种的确是常见,但是返回 的 我真的没见过。或许可以给些例子?

  • 笔者在很长一段时间内都使用 koa@1 +(generator|bluebird)+ sequelize 这个组合,这个组合并没有什么问题,也很常见,但是到了滥用的地步,导致后来维护和调试起来都很痛苦。若排除 sequelize 这个我们不得不用的模块,从调试 cpuprofile 角度讲讲为什么笔者认为应该用 async/await + Promise 替代 co + generator|blu

  • 哪些场景下使用await/async更好?哪些场景下使用then更好? 我的认为await/async的出现是为了改善then的使用,当比较复杂的时候,await/async会起到作用,当问题比较简单的时候用then。但是我们还是应该选择其中一种,这样代码风格比较统一。 例如我下面这个需求使用的await/async不知道是否合适(是不是变得麻烦了?) 工作1:获得选择列表,并默认选择全部。 工作

  • 我读到过,在中包含异步是async/await的反模式。下面的代码可以工作,但是我想知道如果没有中的,如何实现相同的结果。 谢了。

  • 这是我的方法: 我显示加载程序时,但使用在抛给我一个关于字保留的错误。对于验证,我使用VeeValester 如何使用wait-insidepromise?

  • 问题内容: 以下函数从url获取图像并进行加载,然后返回其宽度和高度: 问题是,如果我做这样的事情: 我得到,因为该函数运行但图像尚未加载。 仅当照片已加载且宽度和高度已可用时,如何使用等待/异步返回值? 问题答案: 如何使用/ 将此回调函数转换为Promise? 你不知道与往常一样,您可以使用构造函数。没有语法糖。 仅当照片已加载且宽度和高度已经可用时,如何使用/ 记录值? 你可以做