从 NodeJS 异步返回值
Returning values from NodeJS Async
我在 Node 中遗漏了一些简单的东西,我有一个函数需要导出,return 一个值,异步。我不确定在 return 值之前如何在 Node 中拥有它 "wait",我显然被前端 javascript 和数据绑定宠坏了...
下面的代码不会等待用户取回数据(pusher 是一个 rest call)所以它总是未定义的。
exports.getMembers = function(channel) {
var users;
pusher.get( { path: '/channels/'+channel+'/users', params: {} },
function( error, request, response ) {
if( response.statusCode === 200 ) {
var result = JSON.parse( response.body );
users = result.users;
return users;
}
else {
console.log(error);
}
}
);
//return users;
};
我认为这只是对异步工作原理的根本误解。根据您希望在 "wait" 期间之后发生什么,您可以采用多种方法来解决这个问题。我不知道你在调用 getMembers 后想要执行什么操作,但为了论证,我们只使用控制台消息。
module.exports.getMembers = function(channel, callback) {
pusher.get( { path: '/channels/'+channel+'/users', params: {} },
function( error, request, response ) {
if( !error && response.statusCode === 200 ) {
var result = JSON.parse( response.body );
//found our users, return them as 2nd param
return callback(null, result.users);
}
else {
//something went wrong, fail out
return callback(error);
}
});
}
用法:
var getMembers = require('mymodule').getMembers;
getMembers('#channelNum', function(err, results) {
if(err) return console.error(err);
console.log('Found %s users', results.length);
});
方法二:Promises
这是我在处理异步时的个人选择,因为我觉得它更干净。我省略了代码以保持 post 简短。
我在 Node 中遗漏了一些简单的东西,我有一个函数需要导出,return 一个值,异步。我不确定在 return 值之前如何在 Node 中拥有它 "wait",我显然被前端 javascript 和数据绑定宠坏了...
下面的代码不会等待用户取回数据(pusher 是一个 rest call)所以它总是未定义的。
exports.getMembers = function(channel) {
var users;
pusher.get( { path: '/channels/'+channel+'/users', params: {} },
function( error, request, response ) {
if( response.statusCode === 200 ) {
var result = JSON.parse( response.body );
users = result.users;
return users;
}
else {
console.log(error);
}
}
);
//return users;
};
我认为这只是对异步工作原理的根本误解。根据您希望在 "wait" 期间之后发生什么,您可以采用多种方法来解决这个问题。我不知道你在调用 getMembers 后想要执行什么操作,但为了论证,我们只使用控制台消息。
module.exports.getMembers = function(channel, callback) {
pusher.get( { path: '/channels/'+channel+'/users', params: {} },
function( error, request, response ) {
if( !error && response.statusCode === 200 ) {
var result = JSON.parse( response.body );
//found our users, return them as 2nd param
return callback(null, result.users);
}
else {
//something went wrong, fail out
return callback(error);
}
});
}
用法:
var getMembers = require('mymodule').getMembers;
getMembers('#channelNum', function(err, results) {
if(err) return console.error(err);
console.log('Found %s users', results.length);
});
方法二:Promises
这是我在处理异步时的个人选择,因为我觉得它更干净。我省略了代码以保持 post 简短。