用JavaScript返回回调

时间:2018-09-28 12:34:19

标签: javascript mongodb mongoose callback

从这个答案https://stackoverflow.com/a/21571589/9036255中汲取灵感,我决定将其复制到自己的代码中。我发现它没有任何回应。

function getCallback(callbackTrash) {
    var Books = mongoose.model('Book');
    Books.find({'username': name[usernames]}, function (err, result) {
        callbackTrash(result);
    });
}

getCallback(function(result) {
    books.push(result);
});

books只是一个数组。当我稍后控制台登录时,它返回“ []”

如果我将books.push更改为console.log,它将正确记录所有结果。

我的问题是如何将结果推入books数组?

我对异步事物没有经验。没有陡峭的学习曲线的实际答案是什么?


这是我的主要背景:

exports.timeline = function(req, res) {
    var Followers = mongoose.model('Follow');
    Followers.find({'follower': req.user.username}, function(err, followerResult) {
        var name = [req.user.username];
        var books = [];

        function addName(username) {
            name.push(username);
        }

        for(var user in followerResult) {
            addName(followerResult[user]['followed']);
        }

        for(var usernames in name) {
            function getCallback(callbackTrash) {
                var Books = mongoose.model('Book');
                Books.find({'username': name[usernames]}, function (err, loadOfBollocks) {
                    callbackTrash(loadOfBollocks);
                });
            }

            getCallback(function(result) {
                books.push(result);
            });
        }

        console.log(books);
        res.send(books);
    });
}

1 个答案:

答案 0 :(得分:0)

我认为您的代码是正确的。但是:

  • 您在哪里初始化“书籍”?
  • 您将控制台记录在哪里?

编辑

好,我现在知道了。您将控制台放置并重新发送到错误的位置。 这些行在循环(for)过程完成之前执行。这就是为什么您有一个用于“ books”的空数组的原因。 也许只有在完成“名称”数组中的循环时,才需要执行这些代码。这是代码:

 public synchronized V put(K key, V value) {
        // Make sure the value is not null
        if (value == null) {
            throw new NullPointerException();
        }
...

希望有帮助!