【问题标题】:nodejs loop function calls output problmnodejs循环函数调用输出问题
【发布时间】:2020-05-09 12:51:12
【问题描述】:

我有一个问题,我不明白这段代码是如何工作的。

ans.map((val, indx) => {
   const options = {
        host: 'www.xxxx.com',
        path: '/path'
        port: 80,
        path: path,
        method: 'GET',
    };

    console.log(val)

    send.getJSON(options, (code ,result) => {
        console.log("oke22");
    });
})

对于[1,2,3],我得到的输出是:

1
2
3
oke
oke
oke

为什么不是下面的输出呢?

1
oke
2
oke
3

【问题讨论】:

    标签: javascript node.js loops


    【解决方案1】:

    问题是您的 .getJSON 是异步的,在同步代码中运行,这还不错,但处理方式略有不同。

    Node.js 的设计使用事件循环在 JavaScript 等单线程语言上提供异步性。

    因此,在 .getJSON() 完成之前,您的回调实际上不会被调用。

    https://jsfiddle.net/uva5o10d/

    看看这里,我给你做了一个例子来说明我的意思,我只是用值填充一个数组(这个例子全为 1),并使用 setTimeout 设置一个回调函数(延迟 1s) ,但请注意,该程序将继续运行。 (事件循环)

    在文件的底部,注意test(),它调用了您当前拥有的版本(非常相似),包括对运行时间较长的作业的调用,例如从 API 检索数据。

    注释掉test() 和取消注释working(),你会看到不同,你可能想在.getJSON 中使用console.log(value + " " + oke),产生你正在寻找的结果。

    另外附注,forEach 可能是迭代数组的更好方法,除非您想要返回转换后的数组 (map)。

    我附上了一些我认为对你有帮助的资源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 1970-01-01
      • 2021-05-28
      相关资源
      最近更新 更多