我是node.js的新手,我正在尝试将公司的后端从python迁移到node.js
现在,我使用express创建了一个node.js服务器。路线正常。我的公司使用WooCommerce,他们有一个node.js库。我的代码是这样的:
const WooCommerceAPI = require("woocommerce-api");
class WooCommerceController {
async getOrders(req, res) {
const orders = await WooCommerce.get("orders", function(err, data, res) {
return res;
});
return res.json(orders);
}
}
module.exports = new WooCommerceController();
我知道
WooCommerce.get("orders", function(err, data, res) {
console.log(res);
});
可行,因为如果执行此功能,它将返回我公司的订单列表,但是,如果我尝试将其放入此async
await
中,它将返回WooCommerce API的状态,而不是API的响应。
我在做什么错了?
答案 0 :(得分:1)
WooCommerce.get
用于回调,而await
仅用于返回Promise
的函数。因此,您需要自己创建一个Promise,然后在回调中手动解决它,或者可以使用util.promisify
自动将回调函数(带有(err, value)
回调参数)转换为Promise样式功能。
const wooGetPromise = util.promisify(WooCommerce.get);
...
const orders = await wooGetPromise("orders");
...
编辑:感谢RichS查找API:我的wooGetPromise
已经以WooCommerce.getAsync
的身份存在。
使用该功能的选项为:
WooCommerce.getAsync('orders').then(function(result) {
return JSON.parse(result.toJSON().body);
});
var result = await WooCommerce.getAsync('orders');
var json = JSON.parse(result.toJSON().body);
答案 1 :(得分:0)
hello mate await通常会解析一个Promise,因此在await关键字之后调用的函数应该是一个返回Promise的函数或一个默认返回Promise的asyn函数。
异步功能
WooCommerce.get("orders", async function(err, data, res) {
return res;
});
或返回承诺的函数
WooCommerce.get("orders", function(err, data, res) {
return new Promise(function(resolve, reject){
err ? reject(err) : resolve(res);
}
});