gpt4 book ai didi

node.js - 如何向第三方服务器发出 promise 调用?

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:26 25 4
gpt4 key购买 nike

我正在尝试调用 Extranet,它应该返回一个参数,但 api 不会等待它。

Orders.prototype.add = function (data, db, callback, logger) {
var extranet = new API_EXTRANET();
extranet.addOrder(data, function(err, orders) {
if (!err) {
if(callback) callback(false, orders);
}else{
if(callback) callback(err, false);
}
}, logger);
};

我试图返回它的 Promise,但什么也没发生。

Orders.prototype.add = function (data, db, callback, logger) {
var extranet = new API_EXTRANET();
return new Promise((resolve, reject) => {
extranet.addOrder(data, function(err, orders) {
if (err){
reject(err)
} else {
resolve(orders)
}
})
})
};

这是我调用该方法的地方:

order.addStoreOrder(order_data_update, db).then((response) => {
order.add(array_data, db, function (err, order_response) {

最佳答案

您正在混合不同的方式来处理异步调用:回调和 promise 。你应该只遵守 promise 。

// There is no need for callback here, the promise replace your callback
// Because you use of await I guess you should use it here as well
Orders.prototype.add = async (data) => {
const extranet = new API_EXTRANET();

return util.promisify(extranet.addOrder)(data);
};

// How to call it
try {
const orders = await order.add(arrayData);
} catch (err) {
// Handle the error
}
<小时/>

如果您想包装 addOrder 返回,您可以这样做:

Orders.prototype.add = async(data) => {
const extranet = new API_EXTRANET();

try {
const orders = await util.promisify(extranet.addOrder)(data);

console.log(orders);

return orders;
} catch (err) {
console.error(err);

throw new Error('custom error');
}
};

// How to call it
try {
const orders = await order.add(arrayData);
} catch (err) {
// Handle the error
}
<小时/>

文档:util.promisify()

描述:它将使用回调的函数变成 Promise 函数

关于node.js - 如何向第三方服务器发出 promise 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58299919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com