javascript - 在 JavaScript 中等待两个异步命令

标签 javascript asynchronous promise

例如,假设我有这段代码:

var cmd = require('node-cmd')


function getStuff() {

    return new Promise((resolve, reject) => {

        var dataNStuff;
        cmd.get('brew --version', data => {
            dataNStuff += data;
        })

        cmd.get('yarn global ls', data => {
            dataNStuff += data;
        })
        resolve(dataNStuff)

    })
}

在这种情况下 cmd.get() 是异步的,所以我不知道数据何时进入。我希望能够在我 resolve(dataNStuff ),这甚至可以通过 Promise 实现,不,我不想在这种情况下使用回调。有没有更简单或更快的方法来做同样的事情?

最佳答案

使用 Promises 作为解决方案,使用 Promise.all 和“promisified”版本的 cmd.get

var cmd = require('node-cmd');

var cmdPromise = arg => new Promise((resolve, reject) => cmd.get(arg, resolve));

function getStuff() {
    return Promise.all([cmdPromise('brew --version'), cmdPromise('yarn global ls')])
    .then(results => results.join(''));
}

“解释” cmdPromise 以防压缩版本不可读,基本上是这样的:

var cmdPromise = function cmdPromise(arg) {
  return new Promise((resolve, reject) => {
    cmd.get(arg, data => resolve(data));
  });
};

关于javascript - 在 JavaScript 中等待两个异步命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41540815/

相关文章:

c# - HttpClient GetAsync 在 Windows 8 上未使用非空返回类型完成

typescript - 如何在 TypeScript 中使用 fetch

javascript - 向父选项卡发送 Flash 成功消息

javascript - 禁用自动生成的选择标签中的双击

javascript - 使用多行单元格操作 HTML 表格中的行和列

javascript - 是否有 ESLint 规则来防止 `Promise<boolean>` 到 `boolean` 转换

javascript - 获取 api - 在 then 和 catch block 中获取 json 主体以获得单独的状态代码

javascript - 发送后如何在 OPEN 就绪状态下保持 websocket 连接?

Java保证回调顺序执行

c# - 我想处理 System.Threading.Tasks.Task.Factory.StartNew(); 中的异常