node、JavaScript、解決異步回調javascript
用法:java
const promise = new Promise(function(resolve, reject) {
reject('這裏走的是catch') // 這裏會報錯 但不會影響呈現執行 緣由: reject中應當傳入一個Error對象 例如:reject(new Error('errorMsg'))
// resolve('請求成功')
})
promise.then(function(result) {
console.log(result) // -- 請求成功
return '下一個then的result'
}).then(function(result) {
console.log(result) // -- 下一個then的result
}).catch(function(error) {
console.log(error) // -- 這裏走的是catch
})
複製代碼
const promise = new Promise(function(resolve, reject) {
resolve('請求成功')
})
promise.then(function(result) {
console.log(result) // -- 請求成功
throw new Error('出差了')
}).then(function(result) {
console.log('前一個then throw 一個錯誤 這裏將被跳過')
}).catch(function(error) {
console.log(error) // -- 出差了
return '出錯後執行'
}).then(function(res) {
console.log(res) // -- 出錯後執行
})
複製代碼
// Promise.all的參數是個數組,callBack的參數也是數組對應all的返回
Promise.all([func1(), func2(), func3()])
.then(([result1, result2, result3]) => { /* use result1, result2 and result3 */ });
// Promise.race()的參數是個數組,callBack的參數爲最早執行完的函數返回值
Promise.race([p1, p2]).then((result) => {
console.log(result) // p1 和 p2 那個快(先執行完並返回結果)返回那個
}).catch((error) => {
console.log(error) // 打開的是 'failed'
})
複製代碼
const promiseInit = new Promise(function(resolve,reject) {
setTimeout(function() {
resolve('這個是setTimeout的輸出')
}, 1000)
})
const promise = new Promise(function(resolve, reject) {
// reject('這裏走的是catch') // 這裏會報錯 但不會影響呈現執行 緣由: reject中應當傳入一個Error對象 例如:reject(new Error('errorMsg'))
resolve('請求成功')
})
promise.then(function(result) {
console.log(1000, result) // -- 請求成功
// throw new Error('出差了')
}).then(async function(result) {
return promiseInit.then(function(aaa) {
console.log(111, aaa)
return aaa
})
// return 'name'
}).then(function(res) {
console.log(222, res)
})
以上執行順序爲
-- 1000
-- 111
-- 222
const promise = new Promise(function(resolve, reject) {
// reject('這裏走的是catch') // 這裏會報錯 但不會影響呈現執行 緣由: reject中應當傳入一個Error對象 例如:reject(new Error('errorMsg'))
resolve('請求成功')
})
promise.then(function(result) {
console.log(1000, result) // -- 請求成功
// throw new Error('出差了')
}).then(async function(result) {
promiseInit.then(function(aaa) {
console.log(111, aaa)
return aaa
})
return 'name'
}).then(function(res) {
console.log(222, res)
})
以上執行順序爲
-- 1000
-- 222
-- 111
複製代碼