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循环函数调用输出问题