[英]Weird behavior with Promise throwing “Unhandled promise rejection” error
[英]two weird behavior of Promise
我發現自己對ES6 Promise
缺乏了解。
我有兩個問題
問題 1)
// clear
var _o = null
var m = () => {
return new Promise(k => {
_o = k
})
}
m().then(r => {console.log(r+1000)})
_o(100)
// 1100
正如你在上面看到的,當_o
用它的值調用時,promise 解析,我們可以記錄這個值(感謝 .then)
所以上面的例子看起來很清楚。
但這是一個我無法完全理解的例子。
// weird
var _o = null
var test = () => {
return new Promise(res => {
_o = res
})
}
test();
var p = _o(100)
console.log(p) // undefined
p
怎么可能是未定義的?
根據承諾 mdn 文檔,
Promise.resolve() 方法返回一個使用給定值解析的 Promise 對象。
我認為p
必須解決 Promise 對象。
問題2)
Promise.resolve(10).then(r => console.log(r)) // 10
var p = Promise.resolve
p(10).then(r => console.log(r))
// Uncaught TypeError: PromiseResolve called on non-object
為什么p(10)
會引發錯誤?
我已經參考了這篇文章,但還是沒能完全理解。
在此先感謝您的幫助!
p怎么可能是未定義的?
您似乎假設Promise.resolve
(您引用的)與傳遞給Promise
構造函數回調的函數相同。 他們是不一樣的:
new Promise(resolve => { console.log(Promise.resolve === resolve); })
實際上,規范定義了傳入的函數返回undefined
: 25.6.1.3.2 Promise Resolve Functions 。
你可以認為Promise.resolve
相當於
Promise.resolve = function (value) {
return new Promise(resolve => resolve(value));
}
為什么 p(10) 會引發錯誤?
這只是部分與Promise
相關。 這通常是由於如何this
函數內的工作。 從關於Promise.resolve
的規范:
resolve
函數期望它的this
值是一個支持 Promise 構造函數的參數約定的構造函數。
如果您將函數調用為p(...)
那么this
是undefined
。
如果函數被調用為Promise.resolve(...)
那么它的this
值將引用Promise
。
內置函數期望它們的this
值是特定類型的對象/值的情況並不少見。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.