javascript - 将 Ember 函数转换为使用 ES2017 async/await

标签 javascript ember.js ember-data ecmascript-2017

我想将此 Ember 路由操作转换为使用 ES2017 异步/等待。有人可以解释一下这是什么样子吗?

根据规范,我已经将: babel: { includePolyfill: true } 添加到我的 ember-cli-build.js 文件中:

save() {
      let tenant = this.modelFor(this.routeName).tenant;
      let app = this.modelFor(this.routeName).app;

      return tenant.save().then(()=> {
        return tenant.get('app').save({ adapterOptions: { tenantId: tenant.id }}).then(() => {
          this.transitionTo('tenants.tenant.info', tenant.id);
        }).catch((error) => {
          tenant.get('app').rollback();
          throw error;
        });
      }).catch((error) => {
        tenant.rollback();
        throw error;
      });
    }

最佳答案

您的代码,转换为异步/等待:

async save() {
    let tenant = this.modelFor(this.routeName).tenant;
    let app = this.modelFor(this.routeName).app;

    try {
        await tenant.save();

        try {
            await tenant.get('app').save({ adapterOptions: { tenantId: tenant.id }});
            this.transitionTo('tenants.tenant.info', tenant.id);
        } catch (error) {
            tenant.get('app').rollback();
            throw error;
        }
    } catch (error) {
        tenant.rollback();
        throw error;
    }
}

要从 Promise 进行转换,请将 await 关键字添加到返回 Promise 的方法调用中。您放置在 Promise 的 then 方法中的所有内容都可以简单地放在 await 语句之后。

promise 的 catch 方法转换为常规的 try/catch block 。

关于javascript - 将 Ember 函数转换为使用 ES2017 async/await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50658145/

相关文章:

javascript - 异步上传文件然后保存相关数据

ember.js - 其余适配器在 ember 中无法工作

ember.js - Ember 数据初始化顺序

json - 在没有 Ember-Data 的情况下恢复模型更改

javascript - 图像可以链接为分页中的 $next 吗?

javascript - 无法动态向数组添加元素

javascript - Kendo UI Mobile 如何禁用 touchmove 绑定(bind)

javascript - 管理通过ajax发送到php的表单数据+其他变量

javascript - Ember.js:从集合中检索随机元素

javascript - Ember cli 应用程序具有不同的适配器类型?