从多个记录发送SQL Server的Mongo ID

时间:2019-05-22 15:20:35

标签: javascript node.js mongodb tedious

我有一个数据迁移器,当将数据从SQL Server迁移到Mongo时,它获取生成的ID并通过插入生成的ID更新SQL表。显示的错误是“ RequestError:只能在LoggedIn状态下进行请求,而不能在SentClientRequest状态下进行”。在我看来,它试图执行更新请求而不完成前一个请求。 (请记住,一次必须发出多个请求)

我尝试了connection.on('doneInProc')事件,但我不太了解此事件的工作原理


function updateSql(cliente) {
    console.log("ATUALIZANDO SQL...")
    console.log("Entrou")
    request = new Request(`update tbLekkus_Cliente set customerId = '${cliente._id}' where codCliente = ${lastCodCliente}`, function(err) {
        if (err) {
            console.log("erro: >>>", err)
        } else {
            console.log("foi")
        }

    })
    connection.execSql(request);
    request.on('doneInProc', function(rowCount, more, returnStatus, rows) {
        return
    });
}

function updateMongo(cliente) {
    if (cliente.action === 'add') {
        db.collection("TesteCollection").insertOne(cliente, { writeConcern: { w: 2, j: true, wtimeout: 10000 } });
        updateSql(cliente)
    } else {
        try {
            let id = cliente._id
            delete cliente._id
            db.collection("TesteCollection").updateOne(id, cliente);
        } catch (e) {
            console.log('Erro no update aqui', e)
            return
        }
    }
}

我需要通过一次将所有生成的ID一次插入到所有输入的记录中来更新SQL Server

1 个答案:

答案 0 :(得分:0)

您的SQL客户端库很可能从其execSql调用返回一个Promise,在这种情况下,您可以使用async / await来实现所需的目标,像这样:

// NOTE the addition of the async keyword to the function signature
async function updateSql(cliente) {
    console.log("ATUALIZANDO SQL...")
    console.log("Entrou")
    request = new Request(`update tbLekkus_Cliente set customerId = '${cliente._id}' where codCliente = ${lastCodCliente}`, function(err) {
        if (err) {
            console.log("erro: >>>", err)
        } else {
            console.log("foi")
        }

    })

    await connection.execSql(request);
    // Won't reach this line until the above has completed

    // Can also be replaced with 'return connection.execSql(request);'
    // but will still require you to resolve updateSql as a promise in the calling function
}

但是,请注意,这也使您的updateSql函数返回一个promise,因此,调用它的任何人都需要通过在另一个异步函数中等待它或通过resolving it as a promise来对其进行处理。