在类js或nuxt-html上,我应该把async wait放在哪里



classWooCommerceProducts.js

import {
WooComRestApi
} from "~/plugins/classWooCommerceOrigin.js";
export class WooCommerceProducts {
constructor() {
}
//-- A method --
async get() {
const getproducts = await WooComRestApi.get("products").then((response) => {
return response.data
}).catch((error) => {
return "WooCommerceProducts get failre"
})
return getproducts
}
//or
//-- B method --    
get() {
const getproducts = WooComRestApi.get("products").then((response) => {
return response.data
}).catch((error) => {
return "WooCommerceProducts get failre"
})
return getproducts
}
}

产品.vue

// -- A method --
methods: {
getProducts() {
const WooComProducts = new WooCommerceProducts()
WooComProducts.get().then((response) => {
this.products = response
}).catch((error) => {
throw new Error(error)
})
}
},
or
// -- B method --
methods: {
async getProducts() {
const WooComProducts = new WooCommerceProducts()
await WooComProducts.get().then((response) => {
this.products = response
}).catch((error) => {
throw new Error(error)
})
}
},

两部分的快速问题

  1. 我有一个js类正在从后端调用并获取产品数据,两个代码都有效,一个是html vue上的i async和await,另一个是js类上的i异步await,那么哪一个做对了?有人能告诉我它的不同剂量吗?

  2. 如何将数据或错误返回到函数getProducts,并返回与类相同的结果。如果失败返回";wooCommerceProducts:get failure;它将返回到我的getProducts catch错误函数。

分享您的建议,学习更多精彩内容。如果是你,你将如何执行?

需要记住的是,async/await只是promise.then()的更现代的语法。把它们混在一起是没有意义的。

如何将数据或错误返回到函数getProducts

以异步语法显式返回数据(在try/catch中)。在旧的promise样式中,返回promise。

//-- A method --
async get() {  // note that no "then" appears here
try {
const response = await WooComRestApi.get("products");
return response.data;  // note the return
} catch(err) {
console.log("WooCommerceProducts failure");
throw err;
}
}
//or, using the older syntax
//-- B method --    
get() {
return WooComRestApi.get("products").then((response) => {  // note the return
return response.data;
}).catch((error) => {
console.log("WooCommerceProducts get failure");
throw error;
});
}

我有一个js类正在从后端调用并获取产品数据,两个代码都有效,一个是html vue上的i async和await,另一个是js类上的i异步await,那么哪一个做对了?

与之前相同的模式";一种方法";是正确的,因为它不需要返回。对于";B方法";,你已经选择了新的风格,所以坚持下去…

// -- B method --
methods: {
async getProducts() {
const WooComProducts = new WooCommerceProducts()
try {
this.products = await WooComProducts.get();
} catch(error) {
// handle error
}
}
},

最新更新