0
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);
之前及其後的所有行被完全分配。下劃線地圖行爲
是的,'RS.getCodes(cpt)'似乎會返回一個承諾。 *「我想知道是否有任何方法可以避免JS中的這種行爲」*您必須編寫代碼,以便將方法的異步性考慮在內。如果您的代碼的任何步驟是異步的,則整個過程需要是異步的。 –
@FelixKling我在'RS.getCodes(cpt)'之後調用'.then''所以我認爲可以避免異步行爲? – xxx222
你不是在避免異步行爲。所有'.then'確實提供了一種方法來指定*數據何時可用,應該發生什麼。所以你說*「當數據可用時,執行'options.concat(...)'」*。然而,在你調用'console.log(a)'(這實際上是由JavaScript保證的,任何傳遞給'.then'的回調函數將在下一個事件循環中執行)之後,這一時刻將會在未來的某個時間點。 –