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);
之前及之后的所有行完全分配。{/ p>
答案 0 :(得分:2)
我想知道在JS中是否有任何方法可以避免这种行为,因此在执行console.log(a)之前将完全分配一个;以及之后的所有行。
由于您要在一组项目上调用异步函数,因此通常的解决方案是为每个项目创建一个承诺,并使用Promise.all
等待所有项目。
对现有代码的更改很少。您需要做的就是从set
返回承诺。
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;
});
}