一,Promise实例,只要有then里面有return,就可以无线then
特别注释:resolve 和 then里面的return 都可以返回Promise实例,如果promise实例触发了reject,都能走到最外层的reject
function test() { return new Promise(resolve => { resolve(test2()) }) } function test2() { return new Promise((resolve, reject) => { if (Math.random() * 10 > 5) { resolve([]) } else { reject(null) } }) } test() .then(res => { console.log('success') console.log(res) return 1 }) .then(res => { console.log(res) return 2 }) .then(res => { console.log(res) return 3 }) .then(res => { console.log(res) }) .catch(res => { console.log('error') console.log(res) })
在then里面return promise
function test() { return new Promise(resolve => { resolve() }) } function test2() { return new Promise((resolve, reject) => { if (Math.random() * 10 > 5) { resolve([]) } else { reject(null) } }) } test() .then(res => { return test2() }) .then(res => { console.log(res) }) .catch(res => { console.log('error') console.log(res) })
在resolve返回promise实例
function test() { return new Promise(resolve => { resolve(test2()) }) } function test2() { return new Promise((resolve, reject) => { if (Math.random() * 10 > 5) { resolve([]) } else { reject(null) } }) } test() .then(res => { console.log(res) }) .catch(res => { console.log('error') console.log(res) })
Promise.all正确使用,console.log(num)打印的是一个多维数组,多维数组的长度,等于promise.all(Array)里面Array的长度
Promise.all([axios(), axios()]).then((num) => {
console.log(num)
})