2

簡単なブログ Web サイトを作成して、Node.js Express と Mongoose の実験を始めたところです。

簡単なデータベース操作を実行するルートをいくつか構築しようとしていますが、非同期関数とコードが毎回正しく実行されるかどうかについて混乱しています。

これは基本的に私が持っているものです:

app.get('/createUser', function(req, resp) {
    var newUser = new User({name: 'abc123', pass: 'password321'});
    newUser.save(function(err){ // will this callback always be called correctly?
        if(err) resp.send('ERROR!');
        resp.send('SUCCESS!');
    });
});

そのため、応答を「ERROR!」と書き出す必要があります。保存中にエラーが発生した場合は、「SUCCESS!」保存に成功したとき。ただし、これらの関数のタイミングについては混乱しています。save() が完了する前に get() 関数が戻ることはありますか? もしそうなら、応答は適切に書き出されませんか?

4

1 に答える 1

4

get() 関数は save 関数が完了する前に完了しますが、save コールバックが実行されるまで応答を書き込むものがないため、それまでブラウザーは応答を利用できません。

実行順序を確認できるように、コードにいくつかの console.log() 呼び出しを追加しました。

app.get('/createUser', function(req, resp) {

    console.log('this will print first');

    var newUser = new User({name: 'abc123', pass: 'password321'});
    newUser.save(function(err){ // will this callback always be called correctly?

        console.log('this will print last');

        if(err) {
            resp.send('ERROR!');
        }
        else {
            resp.send('SUCCESS!');
        }
    });

    console.log('this will print second');

});
于 2012-12-11T21:54:56.557 に答える