Отправить Mongo ID для SQL Server из нескольких записей - PullRequest
0 голосов
/ 22 мая 2019

У меня есть переносчик данных, который при переносе данных из SQL Server в Mongo получает сгенерированный идентификатор и обновляет таблицу 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
        }
    }
}

Мне нужно обновить SQL Server, вставляя все сгенерированные идентификаторы, по одному, во все введенные записи

1 Ответ

0 голосов
/ 22 мая 2019

Скорее всего, ваша клиентская библиотека SQL возвращает обещание из вызова execSql, и в этом случае вы можете достичь желаемого с помощью 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 возвращать обещание, поэтому любой, кто ее вызывает, должен будет отследить ее как таковую, либо ожидая ее в другой асинхронной функции, либо разрешая ее как обещание,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...