1
在es6 specification它聲明,傳遞非可召集承諾then
將承諾「履行」處理程序到「身份」。在規範的another section中指出「身份」是評估給定值的函數。根據什麼規範說我認爲這個代碼:爲什麼將javascript承諾傳遞給`then'會導致奇怪的行爲?
Promise.resolve("foo").then(Promise.resolve("bar")).then(v => console.log(v))
等於這個代碼:
Promise.resolve("foo").then(v => Promise.resolve("bar")).then(v => console.log(v))
但是,如果這兩個代碼樣本在最新的Chrome或Firefox執行,第一個輸出「FOO 「和第二個輸出」欄「。我在哪裏誤解了規範?
你將一個承諾傳遞給'then'(你的第一個例子),而不是傳遞一個返回承諾的函數(你的第二個例子)。第一個根據規範不做任何事情,因爲'then'忽略了所有非函數參數。 – 2016-01-23 07:51:50