javascript - 下划线映射行为

标签 javascript underscore.js

  a = _.map(b, set);
  console.log(a);

  function set(item) {
      var cpt = item.code;

      var options = ["code"];
      RS.getCodes(cpt).then(function(response) {
          options = options.concat(_.map(response, options));
          console.log(ndcOptions);
          return options;
      });
   }

在我的程序中,我想将函数 set 应用于列表 b 中的每个元素以生成一个新列表 a。但是,我认为 set 函数有一些异步执行,当我打印 a 时,它给了我一个空白列表,并且所有 console.log(ndcOptions) ; 在执行 console.log(a); 后执行。我想知道是否有任何方法可以避免 JS 中的这种行为,因此 a 将在执行 console.log(a); 和所有行之前完全赋值之后。

最佳答案

I am wondering if there is any way to avoid this behavior in JS, so a will be assigned completely before the execution of console.log(a); and all the lines after it.

由于您想要对一组项目调用异步函数,因此一般的解决方案是为每个项目创建一个 Promise 并使用 Promise.all 等待所有项目。

对现有代码的更改很小。您需要做的就是从 set 返回 promise 。

Promise.all(_.map(b, set)).then(function(a) {
  console.log(a);
  // Anything that needs access to `a` needs to be in or called from here
});

function set(item) {
  var cpt = item.code;

  var options = ["code"];
  return RS.getCodes(cpt).then(function(response) {
//^^^^^^ return the created promise
      options = options.concat(_.map(response, options));
      console.log(ndcOptions);
      return options;
  });
}

关于javascript - 下划线映射行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46673174/

相关文章:

javascript - 升级 underscore.js 会破坏backbone.js

javascript - 某个单词出现在字符串末尾

javascript - 如何更改页面中所有元素的CSS - JavaScript

javascript - "onclick"事件自动触发

javascript - 向下滚动到 jquery 中的下一个 div

javascript - 按特定字符串顺序对对象的 Javascript 数组进行排序?

javascript - 在 Underscore.js 中递归/深度扩展/分配?

Javascript Underscore 如何共享相同的回调

javascript - 这个 MustacheJS-Snippen 可以抵御 XSS 攻击吗?

javascript - 使用代码将视频添加到网站的方法