Promise
是 JavaScript 中的一个核心概念,用于处理异步操作及其结果。它代表了一个尚未完成但预期将来会完成的异步操作的结果。一个 Promise
有三种状态:pending
(进行中)、fulfilled
(已成功)和 rejected
(已失败)
一、实例方法
.then(onFulfilled, onRejected)
:then
方法用于指定当Promise
对象的状态改变时(无论是fulfilled
还是rejected
),应该执行的操作。它返回一个新的Promise
实例。onFulfilled
是当Promise
成功时调用的函数,onRejected
是当Promise
失败时调用的函数。如果then
方法中返回的不是一个Promise
,则返回的Promise
将以返回的值作为结果。.catch(onRejected)
:.catch()
方法是.then(null, onRejected)
的快捷方式,用于指定发生错误时的回调函数。.finally(onFinally)
:finally
方法用于指定无论Promise
对象最后状态如何,都会执行的操作。它不接受任何参数,即不关心Promise
是成功还是失败。
this.loading = true;
getAiBlackAgentSelect(this.form)
.then((res) => {
//请求成功拿到响应结果
if (res.code == "200" && res?.list?.list) {
this.tableData.list = res.list.list;
this.total = res.list.total;
}
})
.catch((err) => {
//请求失败拿到失败结果
this.$message(err)
})
.finally(() => {
//请求结束,关闭loading
this.loading = false;
});
使用async
和await
关键字
是处理异步操作的语法糖,使异步操作看起来更像是同步代码,便于代码的可读性和维护行。通常是和Promise
一起使用,但是awiat
只能在async
的函数内部使用
- **async:**通常用于声明一个异步函数,这个函数会隐式的返回一个promise,如果函数正常结束,就会返回resolve,如果函数抛出了异常,就会被reject掉
- **await:**等待一个async的函数执行结束,并能够接受这个函数返回的结果
this.loading = true;
try {
//请求成功拿到响应结果
const res = await getAiBlackAgentSelect(this.form)
if (res.code == "200" && res?.list?.list) {
this.tableData.list = res.list.list;
this.total = res.list.total;
}
} catch (error) {
//请求失败拿到失败结果
this.$message(error)
}
//请求结束,关闭loading
this.loading = false;
二、静态方法
- Promise.all()
它会等待所有的 Promise 实例都完成(或第一个失败),然后返回一个新的 Promise。如果所有的 Promise 都成功了,那么返回值是一个包含所有 Promise 结果的数组。如果有任何一个 Promise 失败了,那么整个 Promise.all() 就会立即失败,并返回第一个失败的 Promise 的错误信息。
Promise.all([promise1, promise2, promise3])
.then(results => {
console.log(results); // [result1, result2, result3]
})
.catch(error => {
console.error(error);
});
- Promise.allSettled()
这个方法与 Promise.all() 类似,但它会等待所有的 Promise 实例都完成(无论是成功还是失败),然后返回一个新的 Promise。返回值是一个数组,每个元素对应一个输入的 Promise 的结果,包含状态(fulfilled 或 rejected)和值(或错误)。这个方法特别适用于你希望处理一组 Promise,而不管其中是否有失败的情况。
Promise.allSettled([promise1, promise2, promise3])
.then(results => {
results.forEach(result => {
if (result.status === 'fulfilled') {
console.log('Promise fulfilled:', result.value);
} else {
console.log('Promise rejected:', result.reason);
}
});
});
- Promise.any()
这个方法接受一组 Promise 实例作为参数,并返回一个新的 Promise。只要其中的一个 Promise 成功,就会立即返回那个已经成功的 Promise 的值。如果所有 Promise 都失败,则返回一个带有 AggregateError 的拒绝 Promise。这个方法特别适用于你只需要一个 Promise 成功的场景,比如从多个源获取数据,只要有一个成功就可以。
Promise.any([promise1, promise2, promise3])
.then(result => {
console.log('First fulfilled promise:', result);
})
.catch(error => {
console.log('All promises were rejected:', error);
});
- Promise.race()
这个方法接受一组 Promise 实例作为参数,并返回一个新的 Promise。它会返回第一个完成(无论是成功还是失败)的 Promise 的结果或错误。这个方法特别适用于你想要知道哪个 Promise 最先完成的场景,比如比较多个异步操作的速度。
Promise.race([promise1, promise2, promise3])
.then(result => {
console.log('First settled promise:', result);
})
.catch(error => {
console.log('First rejected promise:', error);
});
这四种静态方法各有其特点和适用场景:
Promise.all()
适用于需要所有 Promise 都成功的情况,如多个并行操作都必须成功才能继续。Promise.allSettled()
适用于需要等待所有 Promise 完成但不在意是否全部成功的情况,如批量操作中想知道每个操作的结果。Promise.any()
适用于只需要一个 Promise 成功的情况,如从多个数据源中获取数据,只要有一个成功即可。Promise.race()
适用于需要知道哪个 Promise 最先完成(无论成功还是失败)的情况,如设置超时或比较多个异步操作的速度。