【发布时间】:2013-06-27 20:20:54
【问题描述】:
在使用 Firebase .on("child_added") 时,尝试使用 Q 库(或任何类似库,我不偏袒)在 Node.js 中找到返回数据数组的最佳使用示例;
我尝试过使用Q.all(),但它似乎永远不会等待承诺在返回之前完成。这是我当前的示例:
function getIndex()
{
var deferred = q.defer();
deferred.resolve(new FirebaseIndex( Firebase.child('users').child(user.app_user_id).child('posts'), Firebase.child('posts') ) );
return deferred.promise;
}
function getPost( post )
{
var deferred = q.defer();
deferred.resolve(post.val());
return deferred.promise;
}
function getPosts()
{
var promises = [];
getIndex().then( function (posts) {
posts.on( 'child_added', function (_post) {
promises.push( getPost(_post) );
});
});
return q.all(promises);
}
【问题讨论】:
-
在 JS 中没有办法在你的代码中“阻塞”。所有 q.all() 将做的就是创建一个新的承诺,当其他一切都完成时完成。不过,它没有办法等待它们完成。 JS 不能那样工作...