としてSQLiteのを使用しています多くの幸運
exports.methodName = (req, res) => {
var itemsToReturn = []
for (let item of list) {
db.all(sql), (err, rows) => {
itemsToReturn.push(rows)
}
}
res.json(itemsToReturn)
}
を持っていませんよ(表示するコールバックインターフェイスではなく)約束のインターフェイスを使用または作成してから、Promise.all()
を使用して、すべての非同期処理がいつ完了するかを知ることができます。あなたのデータベースが何であるかは言わないので、あなたのデータベースがすでに有望なインターフェースを持っているかどうかについては何の助けもできません。
exports.methodName = (req, res) => {
let itemsToReturn = [];
let cntr = 0;
for (let [index, item] of list.entries()) {
db.all(sql), (err, rows) => {
if (err) {
// insert error handling here
} else {
itemsToReturn[index] = rows;
++cntr;
if (cntr === list.length) {
res.json(itemsToReturn);
}
}
}
}
}
あなたがdb.allPromise()
と呼ばれるデータベースへの約束のインタフェースを持っていたと仮定すると、あなたはこのような何かを行うことができます:ここで
がlist
を想定して物事のマニュアルの方法が配列だ
exports.methodName = (req, res) => {
Promise.all(list.map(item => {
return db.all(someSql);
})).then(results => {
res.json(results);
}).catch(err => {
res.sendStatus(500);
});
}
感謝:)私はこれを行って、どうすればいいのか教えてください。 – Ralt
@Ralt - 複数の非同期操作を管理するより現代的な方法である約束をどのように働かせるかの例を追加しました。 – jfriend00
@Ralt - SQLiteのいくつかのバージョンのようですが、 'db.all()'はすでに約束を返していますので、私の2番目の実装を使うことができます。 – jfriend00