我有一个react typescript应用程序,在我的应用程序中我使用IndexedDB来存储一些数据。 我有单独的类用于使用 IndexedDB 调用 DB 。在我的一个类方法中,我使用此代码来获取所有数据
public async getAll(){
const promise = await new Promise((resolve,reject)=>{
const req = this.openDB();
req.addEventListener("error", (e) => {
console.log("error ", e);
reject ("error");
});
req.addEventListener("success", () => {
const db = req.result;
const tx = db.transaction("tasks", "readonly");
tx.addEventListener("complete", () => {
console.log("transaction complete");
db.close();
});
const readObj = tx.objectStore("tasks");
const data = readObj.getAll();
data.addEventListener("success",(e)=>{
console.log(data);
console.log(e);
resolve (data.result);
});
});
});
return await promise;
}
在我的一个组件事件处理程序中
const db = new DB();
const dataPro = db.getAll();
dataPro.then((resData)=>{
console.log(resData); // I have Data I need it
}
但是 getAll func 工作正常 without async-await ,所以我的问题是:真的有必要在 getAll func 中使用 async-await 吗?我的意思是有什么情况我需要async-await
我尝试 getAll func code without async-await 它对我来说效果很好
async
和 await
关键字本质上是“语法糖”,用于以更简洁的方式使用 Promises
。它们不是“必需的”,但通常很有用。然而,如果函数所做的只是创建并返回一个 Promise
那么它们就没什么用处了。显示的用法甚至已经是多余的。您正在等待相同的 Promise
两次。到达这里后:
const promise = await new Promise((resolve,reject)=>{
一旦来到这里:
return await promise;
并且由于该函数是
async
,因此在调用它时仍然需要等待(或跟随回调):
dataPro.then((resData)=>{
正如您所观察到的,这都是非常多余和不必要的。如果函数本身在内部没有
await
任何东西,那么它就不需要是
async
。它可以只返回创建的Promise
:public getAll(){
return new Promise((resolve,reject)=>{
// the rest of the code in the Promise
});
}
并且该功能的用法不会改变。