我的應用程序有許多模塊,並使用承諾所有的地方。承諾拒絕「......沒有定義」,我怎麼找到源
有時,深藏在這些模塊中的一個,我的代碼拋出一個異常 和承諾鏈條被拒絕。如果這個錯誤是可重現的,我可以單步執行,直到找到異常爲止。但事實並非如此。
我怎麼到的NodeJS產生回溯,以確定有罪的模塊,功能和代碼行?
這是一個簡單的例子。
'use strict';
// pretend multiple modules, each with deep complicated chains of Promises
Promise.resolve()
.then(() => { return Promise.resolve() })
.then(() => { return Promise.resolve() })
.then(() => { return Promise.resolve() })
.then(() => {
x = "find me if you can, x is very common variable name";
return Promise.resolve
})
.then(() => { return Promise.resolve() })
.then(() => { return Promise.resolve() })
.catch((e) => { console.log("where did you come from " + e) })
從上述的輸出是「你在哪裏來自的ReferenceError:X是未定義」
僅供參考,'return Promise.resolve'沒有意義,因爲那只是返回一個函數引用。也許你的意思是'返回Promise.resolve()'。另外,你也可以直接做'返回值',這是毫無意義的。 – jfriend00
使用,這將捕捉拒絕承諾的堆棧蹤跡[藍鳥承諾(http://bluebirdjs.com/docs/api-reference.html)庫。除此之外,通常情況下,在拒絕發生的地方縮小範圍的方法是將'.catch()'語句記錄到更接近拒絕來源的地方。 '.catch(ERR => {的console.log( 「有用的東西」,ERR);拋ERR;});' – jfriend00
jfriend00,良好的抓。我會更新這個例子。我的例子通過在Promise.resolve中包裝的automaticaly中的任何東西的副作用來工作。因此,我的示例返回已解決的承諾,該函數的參數用於生成解決承諾。 – grabbag