【问题标题】:Add items in reply to KnexJs添加项目以回复 KnexJs
【发布时间】:2021-06-15 14:43:03
【问题描述】:

我有两张表:Sales(葡萄牙语为 tbl_venda)和 Items(葡萄牙语为 tbl_venda_itens)。

使用下面的代码,我可以从销售表中发送数据

const db = require('./db')
const getSales = (req, res) => {
    db('tbl_venda')
        .select('tbl_venda.id_venda', 'tbl_venda.pedido', 'tbl_venda.data_venda',
            'tbl_venda.data_entrega', 'tbl_cliente.nome AS cliente', 'tbl_vendedor.nome AS vendedor',
            'tbl_venda.obs', 'tbl_venda.total_pagar', 'tbl_venda.total_bruto', 'tbl_venda.id_loja',
            'tbl_venda.horadavenda')
        .join('tbl_cliente', 'tbl_cliente.id_cliente', 'tbl_venda.id_cliente')
        .join('tbl_vendedor', 'tbl_vendedor.id_vendedor', 'tbl_venda.id_vendedor')
        .where('data_venda', '>=', req.body.dateInitial)
        .where('data_venda', '<=', req.body.dateFinal)
        .orderBy('id_venda')
        .then(rows => res.status(201).send(rows))
        .catch(error => showError(error, res))
}

db.js

const options = {
    client: 'mysql2',
    connection: {
        ...
    }
}

const knex = require('knex')(options)
module.exports = knex

但我需要添加每次销售的商品。我试图做这样的事情:

const getSales = (req, res) => {
    db('tbl_venda')
        .select('tbl_venda.id_venda', 'tbl_venda.pedido', 'tbl_venda.data_venda',
            'tbl_venda.data_entrega', 'tbl_cliente.nome AS cliente', 'tbl_vendedor.nome AS vendedor',
            'tbl_venda.obs', 'tbl_venda.total_pagar', 'tbl_venda.total_bruto', 'tbl_venda.id_loja',
            'tbl_venda.horadavenda')
        .join('tbl_cliente', 'tbl_cliente.id_cliente', 'tbl_venda.id_cliente')
        .join('tbl_vendedor', 'tbl_vendedor.id_vendedor', 'tbl_venda.id_vendedor')
        .where('data_venda', '>=', req.body.dateInitial)
        .where('data_venda', '<=', req.body.dateFinal)
        .orderBy('id_venda')
        .then(rows => {
            return rows.map(row => {
                return db('tbl_venda_itens')
                    .select('tbl_venda_itens.id_venda_itens', 'tbl_venda_itens.id_venda',
                        'tbl_fornecedor.nome_fantasia AS fabricante', 'tbl_venda_itens.quantidade',
                        'tbl_estoque.descricao AS produto', 'tbl_venda_itens.valor_unitario',
                        'tbl_venda_itens.valor_total', 'tbl_venda_itens.cor', 'tbl_venda_itens.desconto',
                        'tbl_venda_itens.preco_final')
                    .join('tbl_fornecedor', 'tbl_venda_itens.id_fornecedor', 'tbl_fornecedor.id_fornecedor')
                    .join('tbl_estoque', 'tbl_venda_itens.id_estoque', 'tbl_estoque.id_estoque')
                    .where('id_venda', '=', row.id_venda)
                    .then(values => {
                        const newRow = { ...row, item: { ...values } }
                        return newRow
                    })
            })
        })
        .then(values => res.status(201).send(values))
        .catch(error => showError(error, res))

}

不起作用,我只收到空对象。

【问题讨论】:

  • 你需要使用Promiseall
  • 在这种情况下我将如何使用它?
  • 关于map() 调用返回的承诺数组
  • 抱歉,我不明白在我的代码中的何处以及如何编写此代码。我是初学者,我会尝试阅读更多内容以了解在哪里使用 Promise.all
  • 你能举例说明它的外观吗?

标签: javascript promise knex.js


【解决方案1】:
const getSales = (req, res) => {
    db('tbl_venda')
        .select('tbl_venda.id_venda', 'tbl_venda.pedido', 'tbl_venda.data_venda',
            'tbl_venda.data_entrega', 'tbl_cliente.nome AS cliente', 'tbl_vendedor.nome AS vendedor',
            'tbl_venda.obs', 'tbl_venda.total_pagar', 'tbl_venda.total_bruto', 'tbl_venda.id_loja',
            'tbl_venda.horadavenda')
        .join('tbl_cliente', 'tbl_cliente.id_cliente', 'tbl_venda.id_cliente')
        .join('tbl_vendedor', 'tbl_vendedor.id_vendedor', 'tbl_venda.id_vendedor')
        .where('data_venda', '>=', req.body.dateInitial)
        .where('data_venda', '<=', req.body.dateFinal)
        .orderBy('id_venda')
        .then(rows => {
            const requests = rows.map(row => {
                return db('tbl_venda_itens')
                    .select('tbl_venda_itens.id_venda_itens', 'tbl_venda_itens.id_venda',
                        'tbl_fornecedor.nome_fantasia AS fabricante', 'tbl_venda_itens.quantidade',
                        'tbl_estoque.descricao AS produto', 'tbl_venda_itens.valor_unitario',
                        'tbl_venda_itens.valor_total', 'tbl_venda_itens.cor', 'tbl_venda_itens.desconto',
                        'tbl_venda_itens.preco_final')
                    .join('tbl_fornecedor', 'tbl_venda_itens.id_fornecedor', 'tbl_fornecedor.id_fornecedor')
                    .join('tbl_estoque', 'tbl_venda_itens.id_estoque', 'tbl_estoque.id_estoque')
                    .where('id_venda', '=', row.id_venda)
                    .then(values => {
                        const newRow = { ...row, itens: [...values] }
                        return newRow
                    })
                    .catch(error => showError(error, res))
            })
            return Promise.all(requests)
        })
        .then(values => res.status(201).send(values))
        .catch(error => showError(error, res))
}

字体:https://www.freecodecamp.org/news/promise-all-in-javascript-with-example-6c8c5aea3e32/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-10
    • 1970-01-01
    • 2020-08-21
    • 2013-03-24
    相关资源
    最近更新 更多