javascript - 使用 Javascript 的多线程请求

标签 javascript multithreading reactjs

大家好,我正在尝试构建一个 ReactJS 应用程序来控制和监视一些物理设备的状态。为了获取这些物理设备的状态,我使用的请求如下所示:

axios.get('http://192.168.1.***:8080').then( response => {
    let deviceStatusMode = 0;
    if(response.data.isCritical) {
        deviceStatusMode = 1;
    } else if (response.data.isWarning) {
        deviceStatusMode = 2;
    } else {
        deviceStatusMode = 3;
    }
    let opvObj = {
        "odv1" : deviceStatusMode,
        "odv2" : 2,
        "odv3" : 3
    }
    store.dispatch(odvStatus(opvObj));
});

此请求需要发送到多个设备(近 9-10 个)。然而,其中一些将被关闭,其中一些可能不会响应,那么避免等待此请求超时并通过多线程方法合并它们的最好方法是什么?谢谢!

最佳答案

对于 JS 中的“并发”,请使用 Promise.all()

查看https://hackernoon.com/concurrency-control-in-promises-with-bluebird-977249520f23了解更多信息。

根据需要编辑以下代码,但这是一个粗略的轮廓

// assuming these are your devices
const devices = [1, 2, 3, 4, 5, 6, 7, 8, 9]

(async () => {
    // These were then passed to Promise.all() to be executed in parallel. 
    let opvObj = {};
    await Promise.all(devices.map(async (device) => {
        axios.get('http://192.168.1.***:8080')
            .then(response => {
                let deviceStatusMode = 0;
                if (response.data.isCritical) {
                    deviceStatusMode = 1;
                } else if (response.data.isWarning) {
                    deviceStatusMode = 2;
                } else {
                    deviceStatusMode = 3;
                }
                // build up opvObj
                opvObj[`odv${device}`] = deviceStatusMode;
            })
            .catch(error => {
                // do something with the error
                console.log(error)
            });
    }));
    //dispatch 
    store.dispatch(odvStatus(opvObj));
})()

关于javascript - 使用 Javascript 的多线程请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52167269/

相关文章:

javascript 改变一些类名

javascript - 即使我在构造函数中抛出错误,也不会触发 componentDidCatch

multithreading - 芯片多处理和对称多处理之间的区别?

ios - Swift - 如何处理 for 循环中的完成 block ?

ReactJS - 在渲染组件之前加载数据

javascript - 在 react js中悬停卡片时播放视频并在不悬停时显示默认图像

javascript - Node 应用程序 Forever 在后台,如何将其带到前台

javascript - 网页上的引导式滚动

JavaScript 对象未定义

multithreading - 从 QRunnable 发出信号或发布事件