Open Samgao0312 opened 2 years ago
Promise 是异步编程的一种解决方案,最初由社区提出,后被Es6中作为语言标准,提供原生的 promise 对象。
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。 此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
Promise 实例具有then方法,也就是说,then方法是定义在原型对象Promise.prototype 上的。它的作用是为 Promise 实例添加状态改变时的回调函数。
Promise.prototype
getJSON("/posts.json").then(function(json) { return json.post; }).then(function(post) { // ... });
上面的代码使用then方法,依次指定了两个回调函数。第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。
采用链式的then,可以指定一组按照次序调用的回调函数。 这时,前一个回调函数,有可能返回的还是一个Promise对象(即有异步操作),这时后一个回调函数,就会等待前一个 Promise 对象的状态发生变化,才会被调用。
catch()方法是.then(null, rejection) 或.then(undefined, rejection)的别名,用于指定发生错误时的回调函数。
.then(null, rejection)
.then(undefined, rejection)
finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的。
promise .then(result => {···}) .catch(error => {···}) .finally(() => {···});
Promise.prototype.finally = function (callback) { let P = this.constructor; return this.then( value => P.resolve(callback()).then(() => value), reason => P.resolve(callback()).then(() => { throw reason }) ); };
上面代码中,不管前面的 Promise 是fulfilled还是rejected,都会执行回调函数callback。
Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
const p = Promise.all([p1, p2, p3]);
概念
Promise 是异步编程的一种解决方案,最初由社区提出,后被Es6中作为语言标准,提供原生的 promise 对象。
有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。 此外,Promise对象提供统一的接口,使得控制异步操作更加容易。
then() 方法
Promise 实例具有then方法,也就是说,then方法是定义在原型对象
Promise.prototype
上的。它的作用是为 Promise 实例添加状态改变时的回调函数。上面的代码使用then方法,依次指定了两个回调函数。第一个回调函数完成以后,会将返回结果作为参数,传入第二个回调函数。
采用链式的then,可以指定一组按照次序调用的回调函数。 这时,前一个回调函数,有可能返回的还是一个Promise对象(即有异步操作),这时后一个回调函数,就会等待前一个 Promise 对象的状态发生变化,才会被调用。
catch() 方法
catch()方法是
.then(null, rejection)
或.then(undefined, rejection)
的别名,用于指定发生错误时的回调函数。finally() 方法
finally()方法用于指定不管 Promise 对象最后状态如何,都会执行的操作。该方法是 ES2018 引入标准的。
上面代码中,不管前面的 Promise 是fulfilled还是rejected,都会执行回调函数callback。
all() 方法
Promise.all()方法用于将多个 Promise 实例,包装成一个新的 Promise 实例。
其他阅读