在初始函数完成之前调用回调函数

时间:2016-05-09 20:57:27

标签: javascript callback socket.io

我遇到回调函数问题 - 我有一个main函数,里面有两个回调函数。这是主要功能

socket.on('play next video', function(data) {
    removeVideo(cue[0], getCueFromDb(function() {
        io.sockets.emit('next video');
    }));    
});

我的removeVideo函数如下所示:

function removeVideo(id, callback) {
Video.find({'id' : id}).remove(function(err, data) {
    if (err)
        console.log(err)
    console.log("Removed video", id)
});
if (callback)
        callback();
    else
        return
}

和getCueFromDb函数看起来像这样

function getCueFromDb(callback) {
Video.find({}).exec(function(err, videos) {
        if (err) {
            console.log(err)
        }
        if (videos.length) {
            cue.length = 0 // empty array
            videos.forEach(function(video) {
                cue.push(video.id) // push all the videos from db into cue array
            });
            io.sockets.emit('send cue', {cue: cue});
        }
        else {
            console.log("No more videos in database!")
        }
    if (callback)
        callback();
    else 
        return
});

}

但是函数没有以正确的顺序调用 - 我做错了吗?

2 个答案:

答案 0 :(得分:0)

您的回调需要在find.remove()

function removeVideo(id, callback) {
Video.find({'id' : id}).remove(function(err, data) {
    if (err)
        console.log(err)
    console.log("Removed video", id)
    if (callback)
        callback();
    else
        return
});

答案 1 :(得分:0)

你必须改变removeVideo,所以我们只有在删除后才会调用回调。

代码:

 function removeVideo(id, callback) {
    Video.find({'id' : id}).remove(function(err, data) {
        if (err)
            console.log(err)
        console.log("Removed video", id)

       if (callback)
            callback();
        else
            return
    }
    });

因此只有在真正删除vide后才会调用回调。