Существует несколько способов создания и импорта модулей в JavaScript, но насколько я знаю, все они предназначены для синхронной загрузки.Как создать и зависеть от асинхронного JavaScript-модуля?
Чтобы продемонстрировать эту проблему я столкнулся, я создал эти два примера CommonJS модули:
var Dependency;
(function (Dependency) {
Dependency.data = 'Not loaded!';
function doSomethingAsync() {
// Fetching data from server...
setTimeout(function() {
Dependency.data = 'Loaded!';
}, 2000);
}
})(Dependency = exports.Dependency || (exports.Dependency = {}));
Этот модуль содержит некоторую асинхронную код, и не могу (/ не должен) быть использован при «загрузке» , При попытке использовать data
из другого модуля, он не будет работать:
var dep = require("./dependency");
var MyModule;
(function (MyModule) {
function useDependency() {
// Logs out 'Not loaded!'
console.log(dep.Dependency.data);
}
MyModule.useDependency = useDependency;
})(MyModule = exports.MyModule || (exports.MyModule = {}));
Вызов MyModule.useDependency()
покажет, что Dependency
не может использоваться еще.
Я ищу способ реализации общей структуры для использования в моих проектах.
Решение, которое я придумал, использовало (ES6) обещания. Я дал каждому модулю функцию load()
, которая все возвращает обещание. Поэтому в этом случае я бы вызвал Dependency.load().then(MyModule.load)
из своего рода файла входа. Это будет нормально работать в этом случае, так как useDependency()
распечатает Loaded!
. Хотя я не уверен, что это лучшее решение, так как мне нужно будет отслеживать все эти зависимости вручную.
Так что мой вопрос: Каков наилучший способ обработки таких асинхронные зависимостей модулей? И есть ли стандартный способ сделать это?
'Каков наилучший способ создания такого дерева зависимостей асинхронного модуля?' - вы разместили «палку» и хотите получить помощь с «деревом» - лучшее решение - это то, которое работает для вашего проекта в целом, Я полагаю –