あなたの機能は、このようにあなたが同期の方法で結果を返すことができない、データベースへの非同期呼び出しを実行します。あなたは、コールバックで返された値を処理する必要があります。
function test(){
var HereINeedTheArray []
db.allDocs({include_docs: true, descending: true}, function(err, doc) {
// logic to handle doc here
})
}
それとも、あなたの関数をPromisifyことができます。
function test(){
return new Promise(function(resolve, reject) {
db.allDocs({include_docs: true, descending: true}, function(err, doc) {
if (err)
reject(err);
resolve(doc);
});
});
}
test.then(function(doc) {
// handle doc here
})
.catch(function(err) {
// handle error
});
それとも、node.js> = 7.6以上である場合は、async/awaitを使用することができますhave Babel transpiling with ES2017:
function _test(){
return new Promise(function(resolve, reject) {
db.allDocs({include_docs: true, descending: true}, function(err, doc) {
if (err)
reject(err);
resolve(doc);
});
});
}
async function test() {
let doc = await _test();
// handle doc here
}
私に非同期に見えます。このように考えると、 'test'はいくつかのプロセス(db.allDocs)を開始します。完了するまでに時間がかかるので、終了するまで待つのではなく、「完了したら実行する関数です」(コールバックこれはサブ機能と呼ばれます)。しかし、テストはそれが起こったときから戻ってきました。だから、コールバックの中で返された結果*を行うことを計画していたことは何でもしなければなりません。* – James