gpt4 book ai didi

javascript - NodeJS 异步函数返回的 Promise 未定义

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

当我调用 sendText 时,callSendAPI 返回的 promise 返回为未定义,如下所示登录到控制台:

Promise return from callSendAPI undefined

我已经阅读了 Promise 并检查了很多堆栈溢出问题,但我无法掌握代码的哪一部分是错误的。消息发送正常,但未定义的返回会导致高级函数中的等待无法正常工作。

我在构建我的 promise 时做错了什么,导致它返回未定义?

var request = require('request-promise-native');

module.exports = {
callSendAPI : function (sender_psid,response) {
return new Promise(async function(resolve,reject) {
// Construct the message body
let request_body = {
"recipient": {
"id": sender_psid
},
"message": response
}
// Send the HTTP request to the Messenger Platform
try {
var a = await request({
"uri": "https://graph.facebook.com/v2.6/me/messages",
"qs": { "access_token": PAGE_ACCESS_TOKEN },
"method": "POST",
"json": request_body
})
} catch(e) {
console.error("Unable to send message:" + e);
return reject(e);
}
console.log('message sent!')
resolve();
});
},
sendText : function(sender_psid,text) {
return new Promise(async function(resolve,reject) {
var response = { "text": `${text}` };
try {
var a = await module.exports.callSendAPI(sender_psid,response);
console.log("Promise return from callSendAPI " + a);
} catch(e) {
console.error(e);
return reject();
}
console.log("message sent--------------------");
resolve();
});
}
}

最佳答案

下面是一个重写,可以简化您的实现并使用值正确解析 promise :

var request = require('request-promise-native');

module.exports = {
async callSendAPI (sender_psid, response) {
// Construct the message body
let request_body = {
recipient: {
id: sender_psid
},
message: response
};
// Send the HTTP request to the Messenger Platform
try {
var a = await request({
uri: "https://graph.facebook.com/v2.6/me/messages",
qs: { access_token: PAGE_ACCESS_TOKEN },
method: "POST",
json: request_body
});
console.log('message sent!');
return a;
} catch(e) {
console.error("Unable to send message:" + e);
throw e;
}
},
async sendText (sender_psid, text) {
var response = { text: String(text) };
try {
var a = await module.exports.callSendAPI(sender_psid,response);
console.log("Promise return from callSendAPI " + a);
console.log("message sent--------------------");
return a;
} catch(e) {
console.error(e);
throw e;
}
}
};

按照@jfriend00的建议,您可以简单地返回由request()生成的promise,而不是将其包装在try-catch中,可以选择通过链接.then()来记录每个场景,如下所示:

var request = require('request-promise-native');

module.exports = {
async callSendAPI (sender_psid, response) {
// Construct the message body
let request_body = {
recipient: {
id: sender_psid
},
message: response
};

// Send the HTTP request to the Messenger Platform
return request({
uri: 'https://graph.facebook.com/v2.6/me/messages',
qs: { access_token: PAGE_ACCESS_TOKEN },
method: 'POST',
json: request_body
}).then(value => {
console.log('message sent!');

return value;
}, error => {
console.error('Unable to send message:', error);

throw error;
});
},
async sendText (sender_psid, text) {
var response = { text: String(text) };

return module.exports.callSendAPI(sender_psid, response).then(value => {
console.log('Promise return from callSendAPI', value);
console.log('message sent--------------------');

return value;
}, error => {
console.error(error);

throw error;
});
}
};

关于javascript - NodeJS 异步函数返回的 Promise 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48245750/

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