4

私はしばらくの間Node.jsでプログラミングしてきましたが、コールバックを連鎖させる必要性にますますイライラするようになりました。たとえば、次のようにデータベースから複数のモデルが必要な場合:

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

私はこの問題の解決策を探しています。私が持っていた1つのアイデアは、次のようなことをすることでした。

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 に答える