Ich versuche, sqlite3 in einer Express-App zu verwenden. Grundsätzlich bekomme ich eine Ruheanforderung, basierend auf der Ruheanforderung, ich eine externe REST-Anfrage abfragen. Zwischen der Antwort von der externen Anfrage & die Daten von der ursprünglichen REST-Anfrage übergeben, mache ich dann ein Update oder Einfügen in eine meiner sqlite3-Tabellen.nodejs sqlite3 db.run als Bluebird Versprechen
Das Problem, das ich renne, ist, dass in db.run(sqlStatement, paramArray, function(err))
, die Funktion (err) ist ein Rückruf, wobei err
ist entweder ein Fehler, oder ein nil
. Wenn der err
Parameter außerdem null
ist, dann enthält die this
Referenz 2 Eigenschaften, von denen einer mir die Anzahl der Zeilen angibt, die von der Anweisung geändert werden. (https://github.com/mapbox/node-sqlite3/wiki/API#databaserunsql-param--callback als Referenz)
Das Ding ist, ich laufe drossel des promisifyAll
auf dem sqlite3-Modul, und verwenden Sie dann die resultierende
db.runAsync(sqlStatement, paramArray).then(err) {
console.log(this) //results in a null
}
Also nicht in der Lage bin ich aus tatsächlich auf Figur ob alles aktualisiert wurde.
Mein ganzer Abschnitt des Codes sieht ein wenig wie folgt aus:
function handleRequest(req, res) {
//this returns the response as the first object
request.getAsync('http://www.example.com', reqObj)
.then(prepareDbObjects) //prepares an array of objects to update the DB with
.then(attemptUpdate)
.then(function(rowsUpdated) {
res.json(rowsUpdated)
}
}
function attemptUpdate(updateObjs) {
var promiseMap = Promise.map(updateObjs, function(singleObj) {
return updateOrInsertObj(singleObj)
}
return promiseMap
}
function updateOrInsertObj(singleObj) {
return db.runAsync(sqlStatement, singleObj)
.then(function(err) {
if(err) {
//handle error
} else {
console.log("this should be an object with 2 properties", this)
//but instead it is null
}
}
}
, wenn Sie 'ablehnen anrufen()', warum es treffen würde '.then()'? – Danosaure