javascript - Promise 在 Express post 请求中返回未定义的 json
问题描述
我在 selectRecipientData 函数中有一个承诺,它从 api 返回一些用户数据。
export async function selectRecipientData({ email }) {
engage.selectRecipientData({
listId: listId,
email: email,
returnContactLists: false,
}, function(err, result) {
if(err) {
console.log(err);
} else {
let recipient = JSON.stringify(result);
// this logs successfully
console.log('Recipient details: ' + recipient );
return recipient;
}
});
}
当我在发布请求中调用此函数时。数据记录在承诺中,但在返回时未定义,如下所示:
server.post('/api/v1/public/selectrecipientdata', async (req, res) => {
formData = req.body;
let { email } = formData;
if (!email) {
res.json({ error: 'Email is required' });
return;
}
try {
let recipientData = await selectRecipientData({ email });
// why is this undefined?
console.log('This is Undefined: '+ JSON.stringify(recipientData) );
res.json({recipientData});
} catch (err) {
res.json({ error: err.message || err.toString() });
}
});
有人告诉我为什么吗?谢谢
解决方案
您已将其编写selectRecipientData
为回调样式函数,但您将其称为异步/等待样式。如果engage.selectRecipientData
返回一个承诺,你可以这样做:
export async function selectRecipientData({email}) {
const result=await engage.selectRecipientData({
listId: listId,
email: email,
returnContactLists: false,
});
const recipient=JSON.stringify(result);
console.log('Recipient details: ' + recipient );
return recipient;
}
否则,要将其转换为 Promise,您可以执行以下操作:
export function selectRecipientData({email}) {
return new Promise((resolve,reject)=>{
engage.selectRecipientData({
listId: listId,
email: email,
returnContactLists: false,
}, function(err, result) {
if (err) {
reject(err);
}
else {
let recipient = JSON.stringify(result);
console.log('Recipient details: ' + recipient);
resolve(recipient);
}
});
});
}
推荐阅读
- postgresql - 为什么 JVM 找不到 Postgresql JDBC 驱动程序?
- spring - Spring 和 Hibernate 中的分层数据获取
- android - 无法使用 ViewModelFactory 实例化我的 ViewModel
- json - JMETER:如何在 Json Extractor 中从 CSV 文件中添加值?
- sql-server - 处理报表中表格中的数据时,SSRS 在每个单元格中添加回车符
- xml - XML 路径列表 - 仅生成某些节点
- oracle - Oracle APEX 中自动显示的字段
- php - 无法将新包添加到 laravel 项目
- r - 带有两个侧面板和绘图的闪亮仪表板
- python - 通过 2d 横截面的气缸配件