【发布时间】:2017-11-20 20:43:42
【问题描述】:
在我的名为 MapController 的控制器中,我正在执行一个函数来解析远程 json 文件,并从 if-else 结构中在名为“parsewebservice”的数组中添加一些值,显然一切正常,但 console.log (解析网络服务);没有在它返回空的地方返回传递给数组“parsewebservice”的值。但是当我把它放在 forEach 里面时,它会返回,但是一切都杂乱无章并重复,这不是正确的方法。
我想知道为什么传递给数组“parsewebservice”的值在 populada 之后没有与变量一起出现,正确的方法是什么?
下面是我的代码:
/**
* MapController
*
* @description :: Server-side logic for managing Maps
* @help :: See http://sailsjs.org/#!/documentation/concepts/Controllers
*/
module.exports = {
index: function(req, res, next) {
Data.find(function foundData(err, datas) {
if (err) return next(err);
var parsewebservice = [];
datas.forEach(function(data, index) {
var req = require("request");
var url = data.address + "?f=pjson";
req(url, function(err, res, retorno) {
if (err) {
console.log(err);
} else {
var camadas = JSON.parse(retorno);
if (camadas.mapName) {
camadas.layers.forEach(function(campo, i) {
if (campo.subLayerIds != null) {
} else if (campo.subLayerIds == null) {
parsewebservice.push([i, "dynamicMapLayer", campo.name, data.address]);
}
});
} else if (camadas.serviceDataType) {
parsewebservice.push([null, "imageMapLayer", camadas.name, data.address]);
} else if (camadas.type) {
parsewebservice.push([null, "featureLayer", camadas.name, data.address]);
}
}
});
});
console.log(parsewebservice);
});
},
};
【问题讨论】:
-
req(url, function(err, res, retorno) {的执行是异步的,你的代码在请求完成之前就到达了console.log(parsewebservice),这就是为什么它是空的......你可以访问异步结果值的唯一地方是里面它的回调函数 -
谢谢@Amr Labib 你有这个案例的回调函数的例子吗?
标签: javascript node.js express sails.js