2016-10-14 17 views
0

我已經開始學習JavaScript承諾。但我無法理解承諾的概念。 最讓我困擾的是誰正在將Resolver和Reject函數傳遞給promise構造函數?何時或誰將解析和拒絕函數傳遞給JS promise?

見無極的這個例子:

function getImage(url){ 
    return new Promise(function(resolve, reject){ 
     var img = new Image() 
     img.onload = function(){ 
      resolve(url) 
     } 
     img.onerror = function(){ 
      reject(url) 
     } 
     img.src = url 
    }) 
} 

現在誰不傳球的決心和拒絕的方法,因爲我理解的javascript說我此腳本將拋出未知變量錯誤,決心和廢品沒有定義?

getImage('doggy.jpg').then(function(successurl){ 
    document.getElementById('doggyplayground').innerHTML = '<img src="' + successurl + '" />' 
}).catch(function(errorurl){ 
    console.log('Error loading ' + errorurl) 
}) 

現在你看到的方法像上面,只有這樣,這些方法(決心和拒絕)傳遞是通過隨後,趕上在上述方法中調用的getImage使用。

+0

'resolve'和'reject'是你傳遞到'Promise'函數的參數。 'Promise'本身調用這個函數並傳入兩個參數。 –

+1

比較:'函數cb(resolve,reject){...};新的承諾(cb);' - 這是否有幫助...? – deceze

+0

@deceze這也幫了我,但一個東西我仍然感到困惑,那麼爲什麼「然後」和「catch」被用來通過其他的方法?他們的工作就好像方法通過它們是解決方法和拒絕方法? – user3769778

回答

3

最讓我困擾的是誰正在將Resolver和Reject函數傳遞給promise構造函數?

沒有人。

功能由承諾傳入構造

它們將傳遞給作爲第一個參數傳遞給promise構造函數的函數。

+0

那麼爲什麼我們傳遞變量來解決,並拒絕方法:'決心(URL)' 這個變量可以是任何東西,傳遞變量從外部範圍是沒有意義的方法是系統生成的,可以是任何東西。 – user3769778

+1

解析器和拒絕函數將變量傳遞給'then'函數,但不是由Promise API生成的。 – Quentin

0

的承諾庫就如何創建並通過這些功能,所有跟蹤的承諾和記錄完成,存儲狀態和進度,取消其所需的其他元數據等

背後青鳥have published some info鄉親圖書館內部工作,你可以看到更多in the Bluebird source

相關問題