2017-05-23 51 views
3

是什麼以下片碼之間的差:理解異步JavaScript

代碼1:

export default async function syncData() { 
    await Promise.all([syncData1(), syncData2()]); 
} 

// called in sagas.js 
function* x() { 
    const res = yield call(syncData); 
} 

代碼2:

export default function syncData() { 
    return Promise.all([syncData1(), syncData2()]); 
} 
// called in sagas.js 
function* x() { 
    const res = yield call(syncData); 
} 
+0

我相信,唯一的區別是,前者返回一個異步函數對象,而後者則沒有。 – Chris

+0

什麼是「通話」,爲什麼你會「屈服」其結果? – Bergi

+0

沒有明顯的差異,都是語法錯誤。您不能在頂級模塊範圍中擁有「yield」。 – Bergi

回答

4

您的兩個功能之間的差別是await VS return 。缺少的await並不重要,因爲從async function返回承諾將始終以承諾結果similar to return await解決。所以唯一的區別是在第一個解決方案中隱式返回undefined

寫出明確:

export default async function syncData() { 
    const res = await Promise.all([syncData1(), syncData2()]); 
    return undefined; 
} 

export default function syncData() { 
    const res = await Promise.all([syncData1(), syncData2()]); 
    return res; 
}