一,Promise的用途
Promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
1,回调接受两个参数
fs.readFile('./1.txt', (error, data)=>{
if(error){ console.log('失败'); return }
console.log(data.toString()) //成功
})
2,写两个回调
ajax('get','/1.json', data=>{}, error=>{})
//前面函数是成功回调,后面函数是失败回调
ajax('get', '/1.json', {
success: ()=>{}, fail: ()=>{}
})
//接受一个对象,对面有两个 key 代表成功和失败
以上2个方法,命名不规范,容易回调地狱,代码看不懂,很难处理错误。 一般来说我们会碰到的回调嵌套都不会很多,一般就一到两级,但是某些情况下,回调嵌套很多时,代码就会非常繁琐,会给我们的编程带来很多的麻烦,这种情况俗称——回调地狱。 这时候我们的promise就应运而生、粉墨登场了
promise是用来解决两个问题的:
回调地狱,代码难以维护, 常常第一个的函数的输出是第二个函数的输入这种现象 promise可以支持多个并发的请求,获取并发请求中的数据 这个promise可以解决异步的问题,本身不能说promise是异步的。
二,创建一个 new Promise
第一步,
return new Promise((resolve,reject) => {...})
成功就调用resolve(lesult),失败则调用reject(error)
resolve和reject会再次调用成功函数和失败函数。
1,Promise.prototype.then,使用.then(success,fail)传入成功函数和失败函数。
2,Promise.all(iterable) 方法返回一个 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”或参数中不包含 promise 时回调完成(resolve);如果参数中 promise 有一个失败(rejected),此实例回调失败(reject),失败的原因是第一个失败 promise 的结果。
它通常在启动多个异步任务并发运行并为其结果创建承诺之后使用,以便人们可以等待所有任务完成。
3,Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。