我在Node中遗漏了一些简单的东西,我有一个需要导出的函数,并返回一个值async。我不确定如何让Node在返回值之前“等待”,我显然被前端javascript和数据绑定所破坏......
下面的代码不会等待用户将数据恢复(推送器是休息呼叫),因此它总是未定义。
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;
};
答案 0 :(得分:3)
我认为这只是对异步如何工作的一个基本误解。根据您在“等待”期后想要发生的事情,有几种方法可以解决这个问题。在你打电话给 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);
});
方法2:Promises
这是我在处理异步时的个人选择,因为我觉得它更干净。我正在遗漏代码以保持这篇文章的简短。