在Promise类出现之前,处理异步代码只有一种方式:回调模式。
回调是一个函数,它作为实参传给另一个函数,并在那个函数中的某个操作完成后被调用。这类回调函数有一个常见的模式:把“错误”作为第一个形参(见下面的示例)。
function callback(error, arg2, arg3) {}
这和异步代码有什么关系?
过去,回调一直被用来让我们在异步任务完成后做一些工作,同时不阻塞整个程序。
fetchProduct(productId, function (error, data) {
if (error) {
// Handle the error
} else {
// Do some work
}
});
在上面的示例中,fetchProduct函数(它是异步的)接收一个回调作为第二个实参,用来决定取回商品数据后该做什么。
这个练习有两个目标:
promisify 函数,把一个使用“回调模式”的函数转换成返回Promise的函数。参见下面的例子。function fetchProduct(productId, function(error, data) {
if (error) {
// Handle the error
} else {
// Make something with your data
}
})
const fetchProductAsPromise = promisify(fetchProduct);
// Now you got a function `fetchProductAsPromise`
// that returns a promise
fetchProductAsPromise(productId)
.then((data) => {})
.catch((error) => {});
Promise 方法(不能使用它们本身)all:接收一个 promise 数组,当_所有_ promise 都成功时它才成功,当_其中一个_失败时它失败。allSettled:接收一个 promise 数组,当_所有_ promise 都成功或失败时它才成功。race:接收一个 promise 数组,它以_第一个_成功或失败的 promise 的值来成功或失败。any:接收一个 promise 数组,当_其中一个_ promise 成功时它才成功,当_所有_ promise 都失败时它失败。