Это очень неправильное утверждение async-await won't work when requiring a module which has an IIFE
.Фактический вывод отличается от ожидаемого вывода из-за synchronous nature of require
, а не из-за IIFE.
Вы можете получить вывод в порядке 1,2,3(after waiting for 1000ms), 4 ,5
, если вы используете любую асинхронную функцию require.
Проверкаэто: -
test1.js
const asyncRequire = require('./async-require');
async function abc() {
console.log(1)
let computeFunction = await asyncRequire("./test2.js");
console.log(4)
computeFunction()
return null;
}
(async () => { await abc() })();
test2.js
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
await (async () => {
console.log(2)
// some connection initialization
await sleep(1000)
console.log(3)
return null;
})();
module.exports = async () => {
// does some computation with those connections
console.log(5)
return null;
}
async-require.js
const fs = require('fs');
module.exports = async path=>{
return new Promise((success, fail)=>{
fs.readFile(path, async (error, file)=>{
const myModule = {};
await eval(`(async (module)=>{ ${file.toString()} })(myModule);`);
success(myModule.exports);
});
})
}