2017-05-17 27 views
-1

我如何在中使用async/await javascript如何在javascript中使用aync/await?

我想擺脫所有的承諾和回調,並在JavaScript中使用異步/等待?

我該怎麼做?

任何幫助是撥款?

+3

https://www.google.com/search?q=use+async% 2Fawait + in + javascript – SLaks

+2

很抱歉讓你失望,但'async' /'await'沒有擺脫承諾。它*擁抱*他們。 – Bergi

+0

謝謝你回答我,但你能解釋我嗎? –

回答

3

異步/等待函數的目的是爲了簡化使用許諾同步的行爲 並在 組承諾的執行某些行爲。就像承諾類似於結構化 回調,異步/等待類似於組合生成器和 承諾。

見這個例子:

function resolveAfter2Seconds(x) { 
    return new Promise(resolve => { 
    setTimeout(() => { 
     resolve(x); 
    }, 2000); 
    }); 
} 

async function add1(x) { 
    var a = resolveAfter2Seconds(20); 
    var b = resolveAfter2Seconds(30); 
    return x + await a + await b; 
} 

add1(10).then(v => { 
    console.log(v); // prints 60 after 2 seconds. 
}); 

async function add2(x) { 
    var a = await resolveAfter2Seconds(20); 
    var b = await resolveAfter2Seconds(30); 
    return x + a + b; 
} 

add2(10).then(v => { 
    console.log(v); // prints 60 after 4 seconds. 
}); 

返回許諾將導致承諾鏈,並將其拆分功能成許多部分的API。考慮下面的代碼:

function getProcessedData(url) { 
    return downloadData(url) // returns a promise 
    .catch(e => { 
     return downloadFallbackData(url); // returns a promise 
    }) 
    .then(v => { 
     return processDataInWorker(v); // returns a promise 
    }); 
} 

它可以用單個異步功能被重寫爲如下:

async function getProcessedData(url) { 
    let v; 
    try { 
    v = await downloadData(url); 
    } catch(e) { 
    v = await downloadFallbackData(url); 
    } 
    return processDataInWorker(v); 
}