You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将JavaScript Promise的返回结果写入函数外部的对象

实现方案
  • 你定义的results是对象类型,push是数组专属方法,不能直接在对象上调用,直接用键名赋值即可写入内容
  • serverStatus返回的是Promise异步任务,需要等待所有请求执行完成后才能拿到完整的结果集

修改后可直接运行的代码

const ping = require('ping');

const results = {}; // 存储最终结果的对象

const ips = {
    server1: '8.8.4.4',
    server2: '1.103.1.1',
    server3: '8.8.8.8',
};

const serverStatus = (hosts) => {
    return new Promise((resolve, reject) => {
        ping.sys.probe(hosts, function (isAlive) {
            const msg = isAlive ? `host ${hosts} is alive` : `host ${hosts} is dead`;
            resolve(msg);
        });
    });
};

const getStatus = async (ips) => {
    // 收集所有ping异步任务
    const taskList = Object.entries(ips).map(async ([key, value]) => {
        const status = await serverStatus(value);
        // 按服务器名作为key写入结果对象
        results[key] = status;
        console.log(status);
    })
    // 等待所有ping任务执行完成
    await Promise.all(taskList);
    // 此处可获取完整的results结果
    console.log('写入完成的results对象:', results);
};

getStatus(ips);

运行输出示例

host 8.8.4.4 is alive
host 8.8.8.8 is alive
host 1.103.1.1 is dead
写入完成的results对象: {
  server1: 'host 8.8.4.4 is alive',
  server3: 'host 8.8.8.8 is alive',
  server2: 'host 1.103.1.1 is dead'
}

如果偏好不用async/await语法,也可以在每个serverStatus的then回调中直接给results赋值,只是要使用完整结果时,仍然需要通过Promise.all的回调来处理后续逻辑,避免拿到未完成赋值的空对象。

内容的提问来源于stack exchange,提问作者Gregor Wedlich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:54:04