es6中Promise多個then的使用方法
阿新 • • 發佈:2020-11-28
應用場景:
我們有一個A方法ajax方法獲得使用者資訊,我們還有一個B方法是馬上要使用使用者資訊,當兩個方法同時呼叫時候,我們無法判別B方法已經拿到A方法的ajax獲取的使用者資訊,基於這樣的需求,我們急需一個能讓他們按照A->B的順序同步執行的東西。
解決辦法:
es6的Promise物件是可以實現同步操作的,這解決了ajax請求想同步按照順序執行的問題。
在後面每個then的時候,我們需要返回Promise物件才可以一直then呼叫,我們可以直接
return new Promise(response => { response({ name: "第2個傳的值" }) });
也可以使用Promise提供的方法
return Promise.resolve({ name: "第3個傳的值" });
使用return new Promise方式無限呼叫then:
new Promise((resolve, reject) => { console.log(1) resolve({ name: "第1個傳遞的值" }); }).then((result) => { return new Promise((resolve, reject) => { setTimeout(() => { console.log(2, result) resolve({ name: "第2個傳遞的值" }) }, 1000) }) }).then((result) => { return new Promise((resolve, reject) => { setTimeout(() => { console.log(3, result) resolve({ name: "第3個傳遞的值" }) },1000) }) }).then((result) => { return new Promise((resolve, reject) => { setTimeout(() => { console.log(4, result) resolve({ name: "第4個傳遞的值" }) }, 1000) }) }).then((result) => { return new Promise((resolve, reject) => { setTimeout(() => { console.log(5, result) }, 1000) }) })
除了上面的方式,還可以使用promise.all方法來實現:
var p1 = new Promise((resolve, reject) => { console.log(1) resolve() }) var p2 = new Promise((resolve, reject) => { setTimeout(() => { console.log(2) resolve() }, 1000); }) var p3 = new Promise((resolve, reject) => { setTimeout(() => { console.log(3) resolve() }, 1000); }) Promise.all([p1, p2, p3]).then((result) => { console.log("執行完畢"); })