admin管理员组文章数量:814904
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循环函数调用输出问题
版权声明:本文标题:nodejs循环函数调用输出问题 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1715137626a821460.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论