私はエクスプレスアプリケーションでsqlite3を使用しようとしています。 基本的には、残りのリクエストに基づいて外部RESTリクエストにクエリを実行して、残りのリクエストを取得します。外部リクエスト&からの応答と元のRESTリクエストから渡されたデータとの間に、私はsqlite3テーブルの1つに更新または挿入を行います。nodejs sqlite3 db.runをブルーバードの約束として
私が遭遇している問題は、db.run(sqlStatement, paramArray, function(err))
では、関数(err)がコールバックで、err
がエラーまたはnil
のいずれかであることです。それに加えて、err
のパラメータがnull
の場合、this
の参照には2つのプロパティがあり、そのうちの1つはステートメントによって変更された行の数を示します。 (参照用https://github.com/mapbox/node-sqlite3/wiki/API#databaserunsql-param--callback)
事は、私は青い鳥のpromisifyAll
sqlite3のモジュール上を実行し、だから私は実際には何が更新されたかどうかを把握することができませんでしだ結果
db.runAsync(sqlStatement, paramArray).then(err) {
console.log(this) //results in a null
}
を使用し、です。コードの
私のセクション全体が少し次のようになります。
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
}
}
}
を行う()'、なぜそれが ')(' .thenを打つでしょうか? – Danosaure