【发布时间】:2020-08-01 18:04:29
【问题描述】:
您好,我编写了一个代码,它将调用 n 次外部 api,然后它的响应将传递给另一个函数,最后合并的响应将由 Azure 函数返回,但似乎我没有得到所有人的响应项目。每次运行此代码时它都会不断变化,我认为我的 promise.all 方法存在问题。请查看我的代码
const axios = require('axios');
let globalContext;
var globalRes = { status: true, products: [] }
const extractProuctFromLUISRes = async (jsonRes, Query) => {
var quantArray = [];
var resp = { quantity: 1, UOM: "", query: Query }
if (jsonRes.entities.hasOwnProperty("UOM") === true) {
if (jsonRes.entities.UOM.length > 0) {
resp.UOM = jsonRes.entities.UOM[0][0]
}
}
globalRes.products.push(resp);
}
const splitAndGetProduct = async (text) => {
//split based on \n
splitedEmail = text.split("\n");
let luisCallPromises = [];
for (var i = 0; i < splitedEmail.length; i++) {
if (splitedEmail[i].length > 5) {
luisCallPromises.push(callLuisProducts(splitedEmail[i]));
}
}
let luisResponses = await Promise.all(luisCallPromises);
for (let luisResponseIterator=0; luisResponseIterator<luisResponses.length; ++luisResponseIterator) {
if(luisResponses[luisResponseIterator])
await extractProuctFromLUISRes(luisResponses[luisResponseIterator].prediction, luisResponses[luisResponseIterator].query);
}
}
const callLuisProducts = async (utterance) => {
return new Promise(async (resolve, reject) => {
var finalApiCall = "#httpsCallquery=" + encodeURIComponent(utterance.substring(0, 500));
//axios call
try {
let a = await axios.get(finalApiCall);
if (a.status == 200) {
var jsonBody = a.data;
if (jsonBody.prediction.topIntent == "product") {
resolve(jsonBody);
} else {
resolve(false);
}
} else {
resolve(false);
}
} catch (error) {
resolve(false);
}
});
}
module.exports = async function (context, req) {
globalContext = context;
var inputArray = JSON.parse(req.body.attachmentProcessed);
await splitAndGetProduct(inputArray);
finalResolve();
}
function finalResolve() {
globalContext.res = {
body: globalRes
};
globalRes = { status: true, products: [] }
globalContext.done();
}
【问题讨论】:
-
你能在
Promise.all之前提供console.log(luisCallPromises)的结果吗? -
2020-02-14T13:10:51.443 [信息] [ Promise {
}, Promise { }, Promise { }, Promise { }, Promise { }, Promise { }, Promise { }, Promise { }, Promise { }, Promise { }, Promise { } ]跨度>
标签: node.js https async-await azure-functions es6-promise