0

私はPHPのバックグラウンドを持っており、node.jsを使い始めました。私がやっているほとんどのことは大丈夫ですが、同期と非同期およびスコープに関しては、頭を包み込むのに苦労していることがいくつかあります。

これは非常に簡単な例です。

app.get('/register/:invite_id?' function(req, res) {
    var agent = superagent.agent(); 
    var form = {};

    agent.post('127.0.0.1/invite/' + req.params.invite_id + '/details')
         .end(function(invite_error, invite_details) {
             form.email = invite_details.body.user.email;
             //I can console.log form.email here
         });


    // I cannot console.log form.email here.. i get undefined.
    // I need to access form.email here, so I can pre-populate my form field below...
    // Sometimes however that agent.post may take 2-3 seconds


    res.render('user/register', {
        form: form
    });

});
4

1 に答える 1

1

render関数への呼び出しを、投稿のコールバック関数のコメントのある行に移動する必要があります。

app.get('/register/:invite_id?' function(req, res) {
    var agent = superagent.agent(); 
    var form = {};

    agent.post('127.0.0.1/invite/' + req.params.invite_id + '/details')
         .end(function(invite_error, invite_details) {
             form.email = invite_details.body.user.email;
             res.render('user/register', {
                  form: form
             });
         });
});

このようにして、form変数にアクセスでき、応答ストリームにレンダリングできます。

一般的に言えば、クロージャの概念(簡単に言うと、パラメーターまたは戻り値として渡される関数)についても理解しておくことをお勧めします。

注:クロージャは上記で書いたものとは少し異なることは知っていますが、初心者にとっては、防弾の説明よりもはるかに理解しやすいと思います。

クロージャの概要については、「クロージャ」とは何ですか?から始めることができます。

于 2013-01-03T15:00:30.177 に答える