4

我用 Node.js 编程已经有一段时间了,我发现自己越来越讨厌需要链接回调。例如,当您需要数据库中的多个模型时,如下所示:

Person.findOne({ 'name.last': 'Ghost' }, 'name occupation', function (err, person) {
    Schedule.findOne({'person_id': person.id }, 'events', function(err, schedule) {
        ...
    }
})

我正在寻找解决这个问题的方法。我的一个想法是做这样的事情:

function() {
    var p;
    var s;
    var done = false;

    Person.findOne(..., ..., function(err, person) {
        p = person;
        done = true;
    });

    while(!done){}
    done = false;

    Schedule.findOne(..., ..., function(err, schedule) {
        s = schedule;
        done = true;
    });

    while(!done){}
    done = false;

    // ...
}

如果我像这样进行查询,会对性能产生什么影响?我也对解决这个问题的其他想法持开放态度。

4

1 回答 1

2

为了回答您最直接的问题,自旋等待回调的性能含义是自旋等待可能会使其他更有用的任务无法完成,无论是在同一进程中还是在同一台机器上。如果您的应用程序在没有电源管理的单用户计算机上运行,​​这无关紧要,但这些都不太可能。忙于等待会破坏移动平台上的电池寿命,增加数据中心的电费,并使未来的代码维护者诅咒你的名字!

正如 elclanrs 已经在评论中建议的那样,您可以查看“异步”库以帮助简化您的代码,但无论如何您应该避免忙于等待。

于 2013-02-10T02:14:36.320 回答