我正在撰寫一個具有多個執行緒和很多需求的程式。我需要回圈依賴,否則檔案太多。
我有一個函式可以防止它回圈,但是節點在它甚至可以運行之前就抱怨它。我試過尋找一種方法,但很難找到“繞過”而不是移動很多東西。
是否可以禁用保護并讓它繼續運行?
這是我的代碼;
常量.js
// This should prevent any circular dependency but node shuts it down too eagerly.
function _getCallerFile() {
// Returns the file that originally called.
var err = new Error();
Error.prepareStackTrace = (_, stack) => stack;
Error.prepareStackTrace = undefined;
return err.stack.toString();
}
var x = _getCallerFile();
console.log(x);
console.log(x.includes(".js"))
console.log(x.includes("threading.js"))
//if (!x.includes("input.js")) var input = require('./constants/input.js');
if (!x.includes("threading.js")) var threading = require('./constants/threading.js');
module.exports ={
threading: threading
//input: input
};
執行緒.js
var x = require('../constants.js');
module.exports.init = async function (whoami) {
x.sendMsg("debug", whoami, `Starting!`);
}
索引.js
var x = require('./constants.js');
async function main() {
x.threading.init(whoami);
}
main();
uj5u.com熱心網友回復:
Node.JS 是否可以防止節點停止執行回圈依賴?
不。你不能繞過 nodejs 中的這些保護。Nodejs 無法在某些型別的回圈依賴項下運行。有一些方法可以讓你接受它。有關詳細資訊,請參閱此處的描述,但總的來說,完全洗掉回圈依賴比嘗試忍受它更安全。
想象一下,如果您非常小心地創建一個回圈依賴項,該依賴項實際上可以作業,因為您訪問事物的時間很謹慎,然后對代碼進行看似無辜的修改突然破壞了事物,那么想象一下您的代碼的維護責任。沒有回圈依賴通常更安全,稍微重構為共享檔案通常可以輕松解決。
這里通常的解決方案是重新設計代碼的布局,以避免首先創建回圈依賴。總是可以將一些公共代碼分解為共享檔案并避免回圈依賴,您應該能夠在不創建無數檔案的情況下做到這一點。
在某些情況下,將兩個檔案合并到一個檔案中會更簡單,您可以在同一檔案中的兩個類之間具有回圈代碼依賴關系。如果您展示具有實際問題的實際代碼,我們可以提供避免回圈依賴的好的選擇建議。
uj5u.com熱心網友回復:
你可能把這里的事情復雜化了。
使用_getCallerFilehack to try 和 auto require 查看您的代碼看起來像是一個等待發生的問題。例如。如果您合法地擁有threading.js.
下面是您的代碼調整后以您想要的方式作業,而無需實作任何時髦的東西。
常量.js
module.exports ={
// threading: threading <- filled during bootstrap stage
};
執行緒.js
var x = require('../constants.js');
async function init(whoami) {
x.sendMsg("debug", whoami, `Starting!`);
}
//bootstrap
x.threading = init;
module.exports = init;
索引.js
require('./threading.js'); //bootstrap
var x = require('./constants.js');
async function main() {
x.threading.init(whoami);
}
main();
更好的是,如果你決定使用 ES 模塊加載器,或者你想開始使用 TypeScript,那么這樣做會奏效。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358255.html
標籤:javascript 节点.js
