javascript - 在返回填充的数组之前,如何在 NodeJS 中等待 foreach?
问题描述
在下面的代码中,我使用 NodeJS 的 nano 包来使用 CouchDB。我正在获取一些记录并在返回之前填充数组。但相反,该函数返回未定义的值。我如何等待 foreach 先完成。
这是代码片段
function getVoters(){
var voters = new Array();
const db = getConnection();
db.view('typeDesignDoc','voterView',function(err, body){
if(!err){
body.rows.forEach(function(doc){
voters.push(doc);
console.log(voters);
});
return voters;
}
else
console.log(err);
});
}
解决方案
您将不得不使用回调或承诺来做到这一点。
function getVoters(cb) {
var voters = new Array();
const db = getConnection();
db.view('typeDesignDoc', 'voterView', function (err, body) {
if (!err) {
body.rows.forEach(function (doc) {
voters.push(doc);
console.log(voters);
});
cb(null,voters);
}
else
cb(err);
});
}
使用承诺
let Promise = require('bluebird');
function getVoters(cb) {
var voters = new Array();
const db = getConnection();
return new Promise((resolve, reject) => {
db.view('typeDesignDoc', 'voterView', function (err, body) {
if (!err) {
body.rows.forEach(function (doc) {
voters.push(doc);
console.log(voters);
});
return resolve(voters);
}
else
return reject(err);
});
});
}
为沙发数据库couchdb-promises使用承诺的驱动程序
或者使用 promisifyAll 方法来 promisify 现有驱动模块的所有方法。但是,对承诺功能有限制
推荐阅读
- python - 从函数修改熊猫数据框
- r - 如何将带有 Twitter 用户关注者计数的列添加到 R 中的数据框?
- r - 在 ggplot2/ggmap 上为不同的图形系列设置固定比例
- python - openapi 代码生成器 - python 服务器存根工作流程
- php - 使用 (preg_replace) 我认为我的语法有点不对劲。我是否需要退出某事或其他
- git - Git 自动合并提交消息
- php - MySQL 使用变量更新表?
- python - Django Test 正在使用 manage.py test 应用程序,但不适用于 manage.py test
- python - 如何使用 seaborn / matplotlib 为条形图的标签名称添加背景颜色
- bash - 将简单目标添加到 cmake 生成的 makefile