我循环遍历从couchdb返回的JSON数据数组,并将数据添加到数组然后返回数组,该数组应包含来自couchdb的行,但返回[]
。
var Album = {
all: function() {
var data, albums = [];
request({ uri: 'http://127.0.0.1:5984/albums/_all_docs'}, function(error, response, body) {
if (error) throw error;
data = JSON.parse(body);
data.rows.forEach(function(d) {
request({ uri: 'http://127.0.0.1:5984/albums/' + d.id }, function(error, response, body) {
if (error) throw error;
albums.push(JSON.parse(body));
});
});
});
return albums;
}
};
答案 0 :(得分:2)
[]
,但一旦回调执行,数组将包含必要的数据。这是节点回调的本质 - 它们是异步的。
答案 1 :(得分:0)
要添加到davin所说的内容,您通常会使用回调来处理异步操作。您的代码存在的问题是,如果您有 n 不同的相册,那么 n 会发生同时的不同请求操作但您无法知道当他们全部完成时。
我不是Node.js家伙,所以也许有实用程序来处理这个问题,但是使用vanilla javascript,这就是我如何处理这样的事情,只需对代码进行最少的更改。
Album.all = function(callback){
request( "_all_docs", function(albums){
var albumsLeft = albums.length;
var results = [];
albums.forEach( function(album_id){
request( "albums/" + album_id, function(album){
results.push(album);
albumsLeft -= 1;
if( albumsLeft === 0){
callback(results);
}
});
});
});
};