Knejx Js только обещает - PullRequest
0 голосов
/ 11 ноября 2018

как заставить эту функцию работать. Только обещание возвращается ко мне.

codeProducts.forEach((code, index) => {

    const qt = app.db('products').where('code',code).first().then(result => result.quantity)
      data[index] = {
        code: code,
        quantity: qt
      }
    })


    return data

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Существует два или три способа решения этой проблемы-

Подход: 1

Я сделаю только один звонок в базу данных. (Мне нравится моя база данных: D) as-

let codeProducts = [55, 68, 96];
knex('products')
    .whereIn('code', codeProducts)
    .then((results) => {
        // response to api call
        console.log(results);
    });

Подход: 2 (Мне не нравится этот подход. Слишком много коллов на дб)

async function getData(codes) {
    try {
        let results = [];
        for (let i = 0; i < codes.length; i++) {
            let dbQuery = await knex('products').where('code', codes[i]).first();
            results.push(dbQuery);
        }
        return results;
    } catch (e) {
        console.log(e);
    }
}


const codeProducts = [54, 95];
getData()
    .then((res) => {
        console.log(res);
    }) 
0 голосов
/ 11 ноября 2018
let data = codeProducts.map((code, index) => {

    return app.db('products').where('code',code).first()
    .then(result => {
        return {
        code: code,
        quantity: result.quantity
      }
    }) 
})  


return data

Этот код должен решить вашу проблему. Вы получаете доступ к количеству вне обещания. Чтобы установить количество в массиве данных, вы должны сделать это внутри тогда

...