2015-04-29 103 views
0

有人可以解釋我爲什麼這個鴕鳥政策工作:輔助外變量的一個的NodeJS承諾中

var outsideVar = 15; 
myFunc.doSomething().then(function() { 
    console.log("outsideVar: " + outsideVar); 
}).fail(function(err) { 
    console.log("error: ", err); 
}); 

輸出是錯誤:未定義或outsideVar:未定義(取決於是否outsideVar是一個變量或財產對象

的外變量應該是從函數內部訪問或i'm錯誤

編輯:?I'm使用這種結構與spookyjs,似乎有含很長的字符串對象的問題。

+2

代碼片段看起來不錯。你能提供更多信息嗎? – Matias

+0

用'.catch()'替換''myFunc.doSomething()''後用'Promise.resolve()'和'.fail()'替換。 – greim

+0

你想'.catch'而不是'.fail'? –

回答

1

在NodeJS中,您將使用一個函數來處理錯誤。像這樣:

myPromise.then(function() { 
    // callback, executed on successful promise resolution 
}, function() { 
    // errback, executed on rejection 
}, function() { 
    // progressback, executed if the promise has progress to report 
}); 

.fail()不是節點中的可識別函數,除非您明確定義了.fail()函數。 .fail()拋出未定義的錯誤。 nodejs中的.fail()用於構建單元測試,而不是承諾。 https://nodejs.org/api/assert.html

否則,正確書寫,關閉應該工作。這是典型的閉包語法。請參閱Is promise a closure?瞭解有關閉包承諾的更多詳細信息。

編輯你也可以使用.catch()而不是顯式的錯誤函數。

+0

在NodeJS中,您肯定不會使用'$ .when' – Bergi

+0

修改特定節點語法的清晰度。 – Devnetics

+0

嗨布萊恩,對不起,我應該更加精確,我使用q,並且有一個失敗函數:https://github.com/kriskowal/q – solick