[英]Child Component to wait for Parent Component ngOnInit async operation before initializing
[英]wait for an async operation before requiring other modules
在我的main.js中,我正在異步讀取文件。 加載文件后,我在GLOBAL
命名空間中設置了一些對象並在我的require
d模塊中使用它們(使用GLOBAL
命名空間或不使用它是一個不同的故事,無論如何我都在使用它)。
我的require
d模塊立即期望該變量在加載時存在。 那么如何讓它等到main.js中我的文件讀取完成? 我只是在readFile
的回調中需要模塊嗎? 或者有更好的方法嗎?
例:
fs.readFile('./file', function (data) {
// do something
GLOBAL.obj = data;
});
require('./module.js');
module.js
obj.someFunction();
你不喜歡這種解決方案的直覺是可以理解的。 (你的胃是對的)。 清理它的正確方法(你應該花時間 - 未來 - 你會感謝你的):
如果一堆函數都依賴於同一組變量,您還可以考慮創建一個工廠函數
創建一個函數,將以前的全局變量作為參數,並將所有模塊的代碼包裝到該函數中。
使該功能成為模塊的單個導出。 它用作工廠函數,並為該模塊中的所有其他函數創建上下文。 它應該返回之前導出的模塊。
例
// DB used to be a global
module.exports = function(DB) {
function getUser(user, cb) {
DB.get('user', db);
}
return {getUser: getUser};
};
然后你可以像這樣使用它:
var module = require('module')(DB);
module.getUser(myUser, function(){}};
是的,只需遵循異步編程的規則#1。 依賴於回調發生的東西必須在該回調中執行。 由於您的require
取決於異步中設置的變量,因此您只能在其中使用您的require
:
fs.readFile('./file', function (data) {
// do something
GLOBAL.obj = data;
require('./module.js');
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.