Javascript从嵌套函数返回值

时间:2015-07-01 01:44:31

标签: javascript node.js

说我有这个功能:

rest = require('restler');

function authenticate(credentials) {
   var accessToken;

   rest.post(BaseURL + '/Users/login', { data : credentials })
       .on('complete', function(result, response) {
               console.log(result.id); // this works fine
               accessToken = result.id;
        });

   return accessToken; 
};

我希望它返回包含string的{​​{1}}  当我跑这个时:

accessToken

我得到var at = authenticate({ "username": "test", "password" : "test" }); console.log('Access Token:', at);

2 个答案:

答案 0 :(得分:4)

标准的,可接受的方式是修改authenticate功能:

function authenticate(credentials, cb) {
   rest.post(BaseURL + '/Users/login', { data : credentials })
       .on('complete', function(result, response) {
               console.log(result.id); // this works fine
               if (cb) { cb(result.id); }
           }
        });
};

然后像这样执行:

authenticate({ "username": "test", "password" : "test" }, function(at) {
    console.log(at);
});

异步调用必须使用回调或promise进行处理。承诺是“非常”但只不过是回调。这就是为什么你看到几乎每个Node API利用回调。

答案 1 :(得分:0)

你有一个}备用完整功能:

rest.post(BaseURL + '/Users/login', {
    data: credentials
})
    .on('complete', function (result, response) {
    console.log(result.id); // this works fine
    accessToken = result.id;
}); // `}` spare here

希望得到这个帮助。