Nodejs如何使用函数的回调结果
Nodejs how to use the callback result of a function
我正在通过编写一个应用程序来管理我的飞利浦色相灯来学习nodejs,我对nodejs的工作方式有一个问题。
我有一个函数,应该得到所有的灯的id:
id = [];
function getLightsId() {
args = {
path: {
"username": "myusername"
}
};
client.registerMethod("getLightState", "http://192.168.0.10/api/${username}/lights/", "GET");
client.methods.getLightState(args, function (data, response) {
for (key in data) {
id.push(key);
}
});
}
问题是,每当我想使用我的id数组,它是空的,因为nodejs没有处理getLightsId回调函数。
ps:我正在使用node-rest-client与我的API交互
它正确地处理了你的回调,只是函数是异步的。这意味着当您稍后尝试使用id
变量时,它仍在处理上述回调。你需要传递另一个回调,并将id
变量传递给它,一旦它被填充:
function getLightsId(callback){
args ={
path:{"username":"myusername"}
};
client.registerMethod("getLightState", "http://192.168.0.10/api/${username}/lights/", "GET");
client.methods.getLightState(args, function(data,response){
var id = [];
for(key in data){
id.push(key);
}
callback(id);
});
}
你可以这样调用它:
getLightsId(function(idArray) {
console.log(idArray); //here they are
});
另一种方法是使用promises库,如 promises -io,这只是避免"回调地狱"的方法之一。
var Deferred = require('promised-io/promise').Deferred;
id = [];
function getLightsId() {
var deferred = new Deffered;
args = {
path: {
"username": "myusername"
}
};
client.registerMethod("getLightState", "http://192.168.0.10/api/${username}/lights/", "GET");
client.methods.getLightState(args, function (data, response) {
for (key in data) {
id.push(key);
}
deferred.resolve();
});
return deferred.promise;
}
getLightsId().then(function(){
// Now you have the id[]s
});
相关文章:
- 将web服务回调的结果绑定到Javascript中的调用函数
- 返回循环中调用的回调结果的串联
- 从回调函数返回 AJAX 结果
- MongoDB:$addToSet Meteor中的重复结果回调
- node.js+MySQL;JSON结果-回调问题&没有响应客户端
- 如何通过回调访问nodejs中的mongodb计数结果
- 如何使用异步并行将所有回调结果合并到最终回调中
- 根据多个回调结果的结果执行最终回调
- 错误的排序回调-结果仍然正确
- bootstrapvalidatorremote的回调结果是json
- 链排队回调结果
- C#处理回调结果
- 如何一次显示所有回调结果(格式化)
- 如何访问angularjs回调结果jsonp
- Nodejs如何在没有settimeout的情况下访问回调结果
- 在单独的函数中使用节点中的回调结果
- 茉莉间谍以假ajax调用来测试回调结果
- nodejs回调don'我不理解回调结果是如何通过参数得出的
- Nodejs如何使用函数的回调结果
- 将回调结果写入页面