Привет, я написал код, который будет 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();
}