javascript - 等待 map 完成,然后用 Promise 写一个日志
问题描述
我正在开发一个简单的应用程序,该应用程序将通过 DialogFlow (Google) 并向我发送根据用户评论获取的意图。
我有以下代码。
let writeToExcel = [];
var promises = xlData.map(data => {
detectIntentText(data.QUESTION);
});
Promise.all(promises).then(function(results) {
console.log(results);
console.log(writeToExcel);
})
但是,打印的数组都是未定义的,它在函数detectIntentText
完成地图中的所有内容之前打印。可能有超过 1000 个条目。
让它发挥作用的最佳方法是什么?
这是detectIntentText函数
async function detectIntentText(userText) {
const sessionId = Math.random().toString(36).substring(7);
const sessionPath = client.projectLocationAgentSessionPath(
projectId,
location,
agentId,
sessionId
);
console.info(sessionPath);
const request = {
session: sessionPath,
queryInput: {
text: {
text: userText,
},
languageCode,
},
};
const [response] = await client.detectIntent(request);
// console.log(`User Query: ${userText}`);
var intent = "";
for (const message of response.queryResult.responseMessages) {
if (message.text) {
// console.log(`Agent Response: ${message.text.text}`);
}
}
if (response.queryResult.match.intent) {
// console.log(
// `Matched Intent: ${response.queryResult.match.intent.displayName}`
//);
intent = response.queryResult.match.intent.displayName;
}
// console.log(
// `Current Page: ${response.queryResult.currentPage.displayName}`
// );
let jsonToWrite = {
CX_QUESTION: userText,
INTENT: intent
}
// console.log(jsonToWrite);
writeToExcel.push(jsonToWrite);
}
解决方案
您没有从map
. 如果detectIntentText()
返回Promise
,那么你的代码应该是
var promises = xlData.map(data => {
return detectIntentText(data.QUESTION);
});
Promise.all(promises).then(function(results) {
console.log(results);
console.log(writeToExcel);
})
您可以像这样摆脱return
关键字,
var promises = xlData.map(data => detectIntentText(data.QUESTION));
推荐阅读
- javascript - JavaScript 函数:在函数的输入 Str 中将第一个字母和 _ 之后的所有字母大写
- if-statement - 如何结合 ARRAYFORMULA 和 COUNTIF
- javascript - 您如何在 xero-node 库中通过联系人获取老化的应收账款?
- mysql - 执行 substring_index 查询
- python - 如何在 django 模板的主页中显示简短版本的帖子
- php - 如何从中间代理调用和获取 API 响应?
- sql-server - 如何在 ssis 中将 dt_date yyyy-mm-dd 转换为 dt_date yyyy/MM/dd?
- java - “hasNextInt()”和“nextInt()”方法的顺序
- google-cloud-platform - 无法通过 cloudbuild 部署到 cloudrun
- python - Python:删除 CSV 中的“中间行”换行符