如何正确使用异步等待

时间:2018-09-27 16:13:04

标签: typescript google-cloud-firestore angular6

我正在尝试将一些数据保存/更新到我的Firestore文档中。我已经成功实现了它,没有任何问题。要保存数据,我使用的是异步函数。但是我对异步函数或Promise不太熟悉。 我在下面发布了我的代码,我的问题是,我是否正确实现了该功能?这是使用异步功能实现更新/创建的正确方法吗?

预先感谢

这是我的代码;

edit_menu.ts

 async onSaveClick() {
try {
  this.modifyService.
    updateLocationWiseMenuData(this.data.id, this.valueArray)
    .then(error => {
      console.log(error);
    }).catch(eror => {
      console.log(eror)
    })
}
catch (error) {
  throw error
}

}

service.ts

  async updateLocationWiseMenuData(id: string, array: any[]) {
try {

  if (id && array.length) {
    for (const i of array) {
      if (i.defaultPrice) {
        await this.afs.collection(`Locations/${id}/menuList`).doc(`${i.id}`).update({
          defaultPrice: i.defaultPrice
        })
      }
      if (i.hasOwnProperty('isAvailable')) {
        await this.afs.collection(`Locations/${id}/menuList`).doc(`${i.id}`).update({
          isAvailable: i.isAvailable
        })
      }
    }
  }
}
catch (error) {
  throw error
}

}

2 个答案:

答案 0 :(得分:0)

在不知道它到底应该做什么的情况下,很难说出它是否正确。

我要说的是捕获错误并立即将其重新抛出是没有意义的。只是让它自己抛出并使调用者对其进行处理。

此外,这没有意义:

.then(error => {
  console.log(error);
})

then()用于处理成功的结果,而不是处理错误。

答案 1 :(得分:0)

异步功能只是一种不同的语法。这是没有异步/等待的代码。

{
   xtype: 'tagfield',
   itemId: 'tagfield',
   multiSelect : true,
   displayField: 'name',
   valueField: 'id',
   bind: {
       label: '{i18n.topic.topics} ',
       store: '{topics}',
       selected: '{record.topics}'
   },
}

使用异步/等待

onSaveClick() {
  return this.modifyService.updateLocationWiseMenuData(this.data.id, this.valueArray)
    .then(success => {
      console.log(success);
    }).catch(error => {
      console.log(error)
    });
}

两个函数都返回一个诺言。