Javascript从嵌套函数返回值

Javascript return value from nested functions

本文关键字:返回值 函数 嵌套 Javascript      更新时间:2023-09-26

假设我有这个函数:

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; 
};

我希望它返回包含accessTokenstring当我运行这个:

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

我得到Access Token : underfined

可接受的标准方法是修改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来处理。承诺很"漂亮",但只不过是回电。这就是为什么您可以看到几乎每一个Nodeneneneba API都在利用回调。

您有一个完整功能的}备用:

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

希望得到帮助。