函数调用输出问题"/>
nodejs循环函数调用输出问题
大家好,我有一个疑问,我不明白这段代码是如何正常工作的。
ans.map((val, indx)=>{
const options = {
host: 'www.xxxx',
path: '/path'
port: 80,
path: path,
method: 'GET',
};
console.log(val)
send.getJSON(options, (code ,result)=>{
console.log("oke22");
});
})
例如ans具有[1,2,3,4,5,6]输出将是:1个23456奥克奥克奥克奥克奥克oke
为什么不输出1个奥克2奥克3奥克4 .......
回答如下:问题是您的.getJSON
是异步的,以同步代码运行,这还不错,但是处理方式略有不同。
Node.js的设计使用事件循环在像JavaScript这样的单线程语言上提供异步性。
因此,在.getJSON()
完成之前,您的回调将不会真正被调用。
https://jsfiddle/uva5o10d/
[这里看一下,我为您提供了一个示例,以说明我的意思,我只用值填充数组(此示例中全为1,然后使用setTimeout设置回调函数(此延迟为1s),注意,该程序将继续运行。 (事件循环)
在文件的底部,请注意test()
,它会调用您当前拥有的版本(非常相似),包括对运行时间更长的作业的调用,例如从API检索数据。
注释掉test()
和取消注释working()
,您会看到不同的地方,您可能想在console.log(value + " " + oke)
中使用.getJSON
,以产生所需的结果。
- https://codeforgeek/asynchronous-programming-in-node-js/
另外,forEach
可能是遍历数组的更好方法,除非您需要转换后的数组(map
)。
更多推荐
nodejs循环函数调用输出问题
发布评论