2017-06-09 47 views
1
const eventBarData = data.map(obj => prepareEventBar(obj.calendar)) 

const mapToSpaceData = eventBarData.map(obj => ({ 
    space_name: obj.space.display.name, 
    ...obj 
})) 

上面的代碼將無法正常工作,因爲兩者同時運行?如何確保eventBarData完成處理然後運行另一張地圖?我必須在地圖中包裹地圖嗎?我不想在prepareEventBar函數中使用回調。使用多個es6地圖,並使其異步

+0

地圖已同步 –

回答

1

prepareEventBar返回Promise。然後,你可以使用Promise.all

另外,如果您的環境支持,或者您使用的是transpiler,一個async function可能有點清潔:

// this code must be wrapped in an async function 
const eventBarData = await Promise.all(
    data.map(obj => prepareEventBar(obj.calendar)) 
); 

const mapToSpaceData = eventBarData.map(obj => ...); 
+0

如何退貨一個承諾? –

+0

最好是閱讀[官方文檔](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) – nem035