promise 物件
//es6 規定,promise物件是乙個建構函式,用來生成promise例項。
const p = new promise(function(resolve,reject)else
})p.then(function (res) ,function (err) )
p.catch(function (err) )
p.finally(function())
promise.all
const p = promise.all([p1, p2, p3])
p的狀態由p1、p2、p3決定,分成兩種情況。
(1)只有p1、p2、p3的狀態都變成fulfilled,p的狀態才會變成fulfilled,此時p1、p2、p3的返回值組成乙個陣列,傳遞給p的**函式。
(2)只要p1、p2、p3之中有乙個被rejected,p的狀態就變成rejected,此時第乙個被reject的例項的返回值,會傳遞給p的**函式。
generator 函式
function* hellogenerator()
let hw = hellogenerator();
hw.next()//
hw.next()//
hw.next()//
hw.next()//
async 函式
function get1(),2000)})}
async function getset()
getset().then(console.log)
async函式返回的 promise 物件,必須等到內部所有await命令後面的 promise 物件執行完,才會發生狀態改變,如果任何乙個await語句後面的 promise 物件變為reject狀態或遇到return,那麼整個async函式都會中斷執行。
另外需要注意的是, await 在等待 promise 物件時會導致 async function 暫停執行, 一直到 promise 物件決議之後才會 async function 繼續執行.
如果我們希望即使前乙個非同步操作失敗,也不要中斷後面的非同步操作。這時可以將第乙個await放在try...catch結構裡面,這樣不管這個非同步操作是否成功,第二個await都會執行。
async function f() catch(e)
return await promise.resolve('hello world');
}f().then(v => console.log(v))
補充
//此處省略getfoo(), getbar()兩個函式
// 寫法一
async function getset()
// 寫法二
async function getset()
*文章參考ecmascript 6 入門 * JS非同步載入的三種方式
我們平時使用的最多的一種方式。同步模式,又稱阻塞模式,會阻止瀏覽器的後續處理,停止後續的解析,只有當當前載入完成,才能進行下一步操作。所以預設同步執行才是安全的。但這樣如果js中有輸出document內容 修改dom 重定向等行為,就會造成頁面堵塞。所以一般建議把 firefox 3.6 opera...
JS非同步載入的三種方式
我們平時使用的最多的一種方式。同步模式,又稱阻塞模式,會阻止瀏覽器的後續處理,停止後續的解析,只有當當前載入完成,才能進行下一步操作。所以預設同步執行才是安全的。但這樣如果js中有輸出document內容 修改dom 重定向等行為,就會造成頁面堵塞。所以一般建議把 firefox 3.6 opera...
js非同步載入的三種方式
預設情況j ascript是同步載入的,也就是j ascript的載入是阻塞的,後面的元素要等待j ascript載入完畢後才能進行再載入,對於一些意義不是很大的j ascript,如果放在頁頭會導致載入很慢的話,是會嚴重影響使用者體驗的。1 defer,只支援ie defer屬性的定義和用法 de...