/** * resolve 異步操做成功時調用的方法,並將異步操做的結果做爲參數傳遞出去 * reject 異步操做失敗時調用的方法,並將報錯傳遞出去 */ var promise = new Promise(function(resolve, reject) { var isSuccess = true // 異步操做是否成功 if (isSuccess) { resolve(data) } else { reject(error) } })
promise.then(function() { // 異步操做成功的處理,resolve狀態 }, function() { // 異步操做失敗的處理,reject狀態 })
var timeout = function(ms) { var data = { list: Array(0), msg: 'success', status: 200 } return new Promise(function(resolve, reject) { setTimeout(resolve, ms, data) }) } timeout(1000).then(function(data) { console.log(data) }, function(error) { console.log(error) })
function loadImageAsync(src) { return new Promise(function(resolve, reject) { var image = new Image() image.src = src image.onload = function() { resolve(image) } image.onerror = function() { reject(new Error(`加載圖片失敗,url:${url}`)) } }) } var url = 'http://n.sinaimg.cn/ent/transform/250/w160h90/20190226/jjhJ-htptaqe5318645.jpg' loadImageAsync(url).then((image) => { document.body.append(image) }, (err) => { console.log(err) })
function timeout(ms) { return new Promise(function(resolve, reject) { setTimeout(() => { resolve() }, ms) }) } async function asyncPrint(ms) { await timeout(ms) console.log(`過去了${ms}毫秒,輸出此語句`) } asyncPrint(1000)
async function f() { return 'hello' }
f().then((data) => { console.log(data) // ‘hello’ })
async function f() { throw new Error('出錯了') } f().then((data) => { console.log('resolve data:', data) }).catch((err) => { console.log('reject error:', err) })
f().then( data => console.log(data), err => console.log(err) )
async function main() { try { const val1 = await firstStep(); const val2 = await secondStep(val1); const val3 = await thirdStep(val1, val2); console.log('Final: ', val3); } catch (err) { console.error(err); } }