const promise = new Promise((resolve, reject) => {
resolve([
{name: 'macbook', price: 993, intro: 'asdjfl'},
{name: 'iphone', price: 32, intro:'sldfk'}
])
})
promise.then(res => {
console.log(res)
}).catch(err => {
console.log("error")
})
const promise = new Promise((resolve, reject) => {
resolve(new Promise((resolve, reject) => {
setTimeout(() => {
resolve("hello javascript")
},3000)
}))
})
promise.then(res => {
console.log(res)
}).catch(err => {
console.log("error")
})
const promise = new Promise((resolve, reject) => {
resolve({
name: 'javascript',
then: function(resolve) {
resolve(112)
}
})
})
promise.then(res => {
console.log(res) //112
}).catch(err => {
console.log("error")
})
promise.then(onFulfilled, onRejected)
onFulfilled
特征
onRejected
特征
promise状态变成fulfilled,所有的onFulfilled回调需要按照then的顺序执行,也就是按照注册顺序执行
promise状态变成rejected之后,所有的onRejected回调需要按照then的顺序执行,也就是按照注册表的顺序执行
then必须返回要给promise
promise支持链式调用,then方法返回的是一个新的promise,链式中的then是等待这个promise有决议之后执行的
代码示例
// 返回的是undefined
const newPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("why")
}, 3000)
})
newPromise.then(res => {
console.log("第一个promise的方法",res) // why
}).then(res => {
console.log("第二个promise的方法", res); //undefined 这里调用的是newPromise.then,由于上面的then没有返回东西,默认返回undefnied
})
// 返回的是普通值
const newPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("why")
}, 3000)
})
newPromise.then(res => {
console.log("第一个promise的方法",res) //why
return "bbb"
}).then(res => {
console.log("第二个promise的方法", res); //bbb
})
//返回的是promise对象
const newPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("why")
}, 3000)
})
const promise = new Promise((resolve, reject) => {
resolve("why")
})
promise.then(res => {
console.log("第一个promise的方法",res)
return newPromise
}).then(res => {
console.log("第二个promise的方法", res);
})
// 返回的是thenable
const newPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("why")
}, 3000)
})
newPromise.then(res => {
console.log("第一个promise的方法",res)
return {
then:function (resolve){
resolve("thenable")
}
}
}).then(res => {
console.log("第二个promise的方法", res);
})
// catch返回新的promise
const promise = new Promise((resolve, reject) => {
reject("error aaaa")
})
promise.catch(err => {
console.log("then第一次回调", err)
}).then(res => {
console.log("then第二次回调",res)
}).then(res => {
console.log("then第三次回调",res)
})
const promise = new Promise((resolve,reject) => {
resolve("bbbb")
})
promise.then(res => {
console.log("then 第一次回调",res)
throw new Error("第二次promise的异常error")
}).then(res => {
console.log("then第二次回调",res)
}).then(res => {
console.log("then第三次回调",res)
}).catch(err => {
console.log("then第四次回调", err)
})
console.log("后续执行的代码")
const promise = new Promise((resolve, reject) => {
reject("error aaaa")
})
promise.catch(err => {
console.log("then第一次回调", err)
}).then(res => {
console.log("then第二次回调",res)
}).then(res => {
console.log("then第三次回调",res)
}).finally(()=> {
console.log("finally action")
})
Promise.resolve("hello world").then(res => {
console.log("then结果", res)
})
//等价于
new Promise((resolve) => {
resolve("hello world")
})
Promise.reject("hello world")
new Promise((resolve, reject) => reject("hello world"))
const promise = new Promise((resolve, reject) => { // 1
resolve() //2
reject() //3
})
promise.then(value => {
console.log("成功的回调")
}).catch(err => {
console.log("失败的回调")
})
//补充 resolve() reject()只会被调用一次。
pending
初始状态,通过调用resolve()函数,将初始状态变成以对象状态。 2处是 fulfilled
状态 fulfilled
状态是最终态,不会改变,所以3处代码reject()
不会执行const promise = new Promise((resolve, reject) => {
reject("failure")
})
promise.then(res => {
console.log("成功的回调",res)
})
promise.catch(err => {
console.log("失败的回调",err)
})
promise.catch(err => {
console.log("失败的回调",err)
})
promise.catch(err => {
console.log("失败的回调",err)
})
promise.then(res => {
console.log("成功回调",res)
}, err => {
console.log("失败回调",err)
})
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p1 resolve")
}, 3000)
})
const p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p2 resolve")
}, 2000)
})
const p3 = new Promise((resolve, reject) => {
setTimeout(()=> {
resolve("p3 resolve")
}, 5000)
})
Promise.all([p1, p2, p3]).then(res => {
console.log("all promise res:", res)
}).catch(err => {
console.log("all promise err", err)
}) //all promise res: (3) ['p1 resolve', 'p2 resolve', 'p3 resolve']
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p1 resolve")
}, 3000)
})
const p2 = new Promise((resolve, reject) => {
reject("error")
})
const p3 = new Promise((resolve, reject) => {
setTimeout(()=> {
resolve("p3 resolve")
}, 5000)
})
Promise.all([p1, p2, p3]).then(res => {
console.log("all promise res:", res)
}).catch(err => {
console.log("all promise err", err)
}) // all promise err error
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("p1 resolve")
}, 1000)
})
const p2 = new Promise((resolve, reject) => {
// reject("error")
setTimeout(() => {
resolve("p2 resolve")
}, 1000)
})
const p3 = new Promise((resolve, reject) => {
setTimeout(()=> {
resolve("p3 resolve")
}, 1000)
})
Promise.allSettled([p1, p2, p3]).then(res => {
console.log("all promise res:", res)
}).catch(err => {
console.log("all promise err", err)
})
//all promise res:
// (3) [{…}, {…}, {…}]
// 0
// :
// {status: 'fulfilled', value: 'p1 resolve'}
// 1
// :
// {status: 'fulfilled', value: 'p2 resolve'}
// 2
// :
// {status: 'fulfilled', value: 'p3 resolve'}
// length
// :
// 3
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
// resolve("p1 resolve"
reject("p1 reject")
}, 1000)
})
const p2 = new Promise((resolve, reject) => {
// reject("error")
setTimeout(() => {
resolve("p2 resolve")
}, 1000)
})
const p3 = new Promise((resolve, reject) => {
setTimeout(()=> {
resolve("p3 resolve")
}, 1000)
})
// 会等到一个promise有结果,无论这个结果是fulfilled还是rejected
Promise.race([p1, p2, p3]).then(res => {
console.log("race Promise", res)
}).catch(err => {
console.log("race promise err",err)
}) //race promise err p1 reject
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
// resolve("p1 resolve"
reject("p1 reject")
}, 1000)
})
const p2 = new Promise((resolve, reject) => {
// reject("error")
setTimeout(() => {
resolve("p2 resolve")
}, 1000)
})
const p3 = new Promise((resolve, reject) => {
setTimeout(()=> {
resolve("p3 resolve")
}, 1000)
})
Promise.any([p1, p2, p3]).then(res => {
console.log("any promise res: ",res)
}) //any promise res: p2 resolve
const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
// resolve("p1 resolve"
reject("p1 reject")
}, 1000)
})
const p2 = new Promise((resolve, reject) => {
// reject("error")
setTimeout(() => {
reject("p2 reject")
}, 1000)
})
const p3 = new Promise((resolve, reject) => {
setTimeout(()=> {
reject("p3 reject")
}, 1000)
})
Promise.any([p1, p2, p3]).then(res => {
console.log("any promise res: ",res)
}) // AggregateError: All promises were rejected
因篇幅问题不能全部显示,请点此查看更多更全内容