Promise.all не ждет всех ответов Azure Node.js Функция - PullRequest
0 голосов
/ 14 февраля 2020

Привет, я написал код, который будет 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...