Запрос нескольких обещаний с обратным вызовом - PullRequest
0 голосов
/ 24 марта 2020

В node.js у меня есть файл databaseMapper.js, в котором используется API-интерфейс MapR для Ojai. извлечь данные. Пока что он работает с отдельными документами, но так как это asyn c api, у меня есть некоторые проблемы с запросом нескольких документов.

Это то, что у меня есть:

function queryResultPromise(queryResult) {
//this should handle multiple promises
    return new Promise((resolve, reject) => {
        queryResult.on("data", resolve);
        // ...presumably something here to hook an error event and call `reject`...
    });
}



const getAllWithCondition = async (connectionString, tablename, condition) =>{
    const connection = await ConnectionManager.getConnection(connectionString);
    try {
        const newStore = await connection.getStore(tablename);
        const queryResult = await newStore.find(condition);
        return await queryResultPromise(queryResult);
    } finally {
        connection.close();
}
}

здесь он будет возвращать только первое, потому что queryResultPromise будет resolve в первом документе ... однако обратный вызов с "data" может происходить несколько раз, прежде чем queryResult закончится следующим образом queryResult.on('end', () => connection.close())

Я пытался использовать что-то вроде Promise.all(), чтобы разрешить все из них, но я не уверен, как включить обратный вызов queryResult.on в этот лог c

1 Ответ

0 голосов
/ 25 марта 2020

Это будет работать

    const queryResultPromise = (queryResult) => {
        return new Promise((resolve, reject) => {
            let result = [];
            queryResult.on('data', (data) => {
                result.push(data)
            });
            queryResult.on('end', (data) => {
                resolve(result);
            });
            queryResult.on('error', (err) => {
                reject(err);
            })
        });
    };
...