В приведенном примере показано, как экспортировать переменную или функцию из пользовательского модуля. Как можно экспортировать асинхронную функцию аналогичным образом, а затем вызвать ее из app.js, например:
// app.js
var things = require("./someThings");
await things.getSomeThingsAsync();
EDIT:
Пример (ответ по Stackoverflow), на который указывает вышеуказанная ссылка, содержит следующий код:
// someThings.js
(function() {
var someThings = ...;
...
module.exports.getSomeThings = function() {
return someThings();
}
}());
// main.js
var things = require("someThings");
...
doSomething(things.getSomeThings());
Скажем, внутри инкапсулированной функции модуля существует асинхронная функция, которую вы хотели бы показать любому, кто импортирует модуль. Например:
(function() {
...
const doSomethingAsync = (time) => {
return new Promise(resolve => {
setTimeout(() => resolve(42), time)
})
}
//const doSomething = async () => {
async function doSomething () {
let answer1 = await doSomethingAsync(3000)
let answer2 = await doSomethingAsync(1000)
return answer1 + answer2
}
...
/*module.exports.doSomething = function() {
return doSomething();
}*/
module.exports.doSomething = async function() {
return doSomething();
}
}());
Как бы вы раскрыли функцию doSomething
аналогично тому, как в исходном ответе она сделана для someThings
- как можно изменить упомянутый ответ таким образом, чтобы при экспорте функций он позволял вам использовать ключевое слово await
? Затем он будет использоваться как:
// app.js
var things = require("./someThings");
console.log(await things.doSomething());
Я пробовал несколько подходов, но всегда получаю:
SyntaxError: await is only valid in async function