javascript - promise 和周期

标签 javascript node.js promise async-await

有一系列 promise ,在我需要从数据库获取他的组和构造函数名称之后,第一个从数据库获取用户的 ID 这些可以是多份副本 结果循环又循环。最终我只收到一个用户的对象

async(takeIds()
  .then(ids => {
    // console.log("ids", ids);
    for (var i = 0; i < ids.length; i++) {
      data.id = ids[i];
      await (takeIdvk(ids[i])
        .then(idm => {
          data.idvk = idm;
          takeIdg(data.id)
            .then(res => {
              takeNamesCycle(res, data)
                .then(data => {
                  console.log("data", data);
                })
                .catch(err => {
                  console.log(err);
                });
            })
            .catch(err => {
              console.log(err);
            });
        })
        .catch(err => {
          console.log(err);
        }));
    }
  })
  .catch(function(err) {
    console.log(err);
  }));

函数 takeNamesCycle 因为它与其他函数不同 (其余的都是对数据库的简单请求)

var takeNamesCycle = async(function(arr, obj) {
  return new Promise((resolve, reject) => {
    for (var i = 0; i < arr.length; i++) {
      var idg = arr[i];
      await (takeNames(arr[i])
        .then(names => {
          obj.idg[idg] = names;
        })
        .catch(err => {
          console.log(err);
        }));
    }
    resolve(obj);
  });
});

可以简化这个吗? 我将不胜感激

最佳答案

考虑使用真正的async/await语法,而不是带有async()await()的库功能。

const ids = await takeIds();
// console.log("ids", ids);
try {
  for (var i = 0; i < ids.length; i++) {
    data.id = ids[i];
    const idem = await takeIdvk(ids[i]);
    data.idvk = idm;
    const res = await takeIdg(data.id);
    console.log("data", await takeNamesCycle(res, data));
  }
} catch(err) {
  console.log(err);
}

并确保avoid the Promise constructor antipattern

async function takeNamesCycle(arr, obj) {
  for (const idg of arr) {
    const names = await takeNames(idg);
    obj.idg[idg] = names;
  }
  return obj;
}

关于javascript - promise 和周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48103969/

相关文章:

javascript - jQuery 验证插件检查不同行之间的输入

javascript - X 轴上的 Highcharts 系列名称

json - 使用 Swift 和 PromiseKit 链接 Alamofire 请求

javascript - AngularJS 中的 promise 顺序

javascript - White Space with Isotope 插件扩展框时,怎么办?

node.js - TypeScript 编译时找不到外部模块

node.js - 使用node.js执行shell程序并将node变量传递给shell命令

node.js - 使用 Mocha 和 Chai 进行测试,消耗之前测试中的值

javascript - 在不重构的情况下将 jQuery $.ajax 包装在 q.js 的外观后面

javascript - 循环中元素的验证