【发布时间】:2020-03-28 21:46:04
【问题描述】:
我有一个检查设备是否在线的功能。下面是代码。
const ping = require('ping');
export function findDevices(device) {
try {
const hosts = [device];
let result = null;
hosts.forEach((host) => {
ping.promise.probe(host)
.then((res) => {
console.log(res.alive)
result = res.alive;
return {
Status: result
}
});
});
} catch (err) {
logger.error(err, '[ config - findDevices() ]');
console.error(err);
return {
Status: "Failed"
}
}
}
我在这样的 redux 操作中调用此函数:
export function start(device) {
return dispatch => {
const status = Connectionstatus.findDevices(device);
return dispatch({
type: actionTypes.CONNECTIONSTATUS,
payload: {
ConnectionStatus: status
}
})
};
}
我希望状态变量为真或假。但是即使我在 promise 函数的 then 中返回值,我也变得未定义。我已尝试等待此电话,但仍然无法正常工作。任何帮助将非常感激。谢谢。
【问题讨论】:
-
您必须在
then()块之外返回结果。这应该有效。 -
我也试过了。它返回 null;
-
为什么你在循环中调用一个promise
-
如果有多个主机,我应该返回每个主机的状态。这就是为什么。
-
您可能想查看将
hosts数组映射为所有承诺,并使用Promise.all()解决它们。
标签: javascript node.js promise async-await