1
これはNodejsの私の最初の個人的なプロジェクトです。私はすぐにライブに入るつもりです。 私はsqlite3を使用するNodejsサーバーを持っています。すでに読み込まれているテーブルの列には、word、transform、および事前に計算された値を持つ3000行しかありません。nodejs promiseまたはwaitを使用してsqlite3クエリ結果を取得する
DB内の単語を調べて、それが有効であることを確認する必要があります。
var sqlite3 = require("sqlite3").verbose();
var db = new sqlite3.Database("validate.db");
db.get("SELECT * FROM tab WHERE w = ?", word, function(err, row) {
if(err) { console.log("Lookup:",word,", Error => ",err); return false; }
return true;
});
問題は、このコードの呼び出し側には多くのコンテキストがあり、処理を待つ必要があることです。だから、私はこれを試しました
function dbLookup(db, w) {
return function(cb) {
var rows = [];
db.exec('SELECT w FROM tab WHERE w = "'+w+'"')
.on('row', function(r) {
rows.push(r)
})
.on('result', function() {
cb(rows);
});
}
async.each([word], function(w) {
dbLookup(this.db, w);
}, function(err) {
if(err) {console.log("...ERROR..."); return false; }
else {console.log("...SUCCESS..."); return true; }
});
これは、コールバックが自分のペースで発砲することができますので、これは問題を解決しません。
私はsolve my problem 青い鳥缶のようなものを使用して、その約束を読ん今私は、クエリの値/結果を得ることができないんだけど:
私は長い間私の髪を引っ張ってきました。私は非同期作業をするか、または約束のアプローチから結果を得るのを助けてください。
感謝。私はあなたの最初のアプローチを試みた。私は 'async.mapの直前に' var all_checked = false; 'を追加しました。' word'は単一の文字列で、 'var all_checked = results.filter'から' var'を削除しました。 'console.log(" Result: "、all_checked);' 'async.map(...});' 'の後に' [] 'を表示するので、結果は出ません。私は同じ問題に戻っているように見えます。代わりに、私は '.get()'を使用してクエリ結果を得ることができますか? –
ノードは非同期であるため、データは '...'になります。 - http://bluebirdjs.com/docs/api/promise.all.html –