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
复制代码