首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同步与异步之争中的node.js概念

同步与异步之争中的node.js概念
EN

Stack Overflow用户
提问于 2013-01-03 22:57:03
回答 1查看 422关注 0票数 0

我来自PHP背景,并且已经开始使用node.js。大多数事情我都做得不错,但有一些事情,当涉及到同步、异步和作用域时,我很难把我的头包起来。

下面是一个非常简单的例子:

代码语言:javascript
复制
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
    });

});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-03 23:00:30

您必须将对render函数的调用移动到post回调函数中带有注释的行:

代码语言:javascript
复制
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变量并将其呈现给响应流。

一般来说,我还建议您熟悉闭包的概念(简单地说,闭包是作为参数或返回值传递的函数)。

注意:I知道闭包与我上面写的略有不同,但我认为对于初学者来说,这比万无一失的解释更容易掌握。

有关闭包的介绍,可以从What is a 'Closure'?开始

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14141308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档