从NodeJSasynchronous中返回值

我在Node中缺less一些简单的东西,我有一个需要导出的函数,并返回一个asynchronous值。 我不知道如何让Node在返回值之前“等待”,我显然被宠坏了前端的JavaScript和数据绑定…

下面的代码不会等待用户返回数据(推送者是一个rest呼叫),所以它总是不确定的。

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

我认为这只是对asynchronous工作的基本误解。 有几种方法可以处理这个问题,这取决于你在“等待”期之后会发生什么。 在调用getMembers之后 ,我不知道要采取什么行动,但是为了争辩,我们只需使用控制台消息。

方法1: 错误 – 第一个callback

 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: 承诺

这是我在处理asynchronous时的个人select,因为我觉得它更干净。 我正在离开代码,以保持这篇文章的简短。