MatAtBread / fast-async

605 stars 21 forks source link

for...of inside async function inside an if blows up #36

Closed djMax closed 6 years ago

djMax commented 7 years ago
export default async function blowUp(obj) {
  if (obj) {
    for (const fk of Object.keys(obj)) {
     console.log(x);
    }
  }
}

Results in:

TypeError: src/fastasync.js: Cannot read property '0' of undefined
    at Buffer._append (/my-serv/node_modules/babel-generator/lib/buffer.js:95:25)
    at Buffer.append (/my-serv/node_modules/babel-generator/lib/buffer.js:72:10)
    at Generator._append (/my-serv/node_modules/babel-generator/lib/printer.js:206:52)
    at Generator.word (/my-serv/node_modules/babel-generator/lib/printer.js:131:10)
    at Generator.Identifier (/my-serv/node_modules/babel-generator/lib/generators/types.js:38:8)
    at /my-serv/node_modules/babel-generator/lib/printer.js:298:23
    at Buffer.withSource (/my-serv/node_modules/babel-generator/lib/buffer.js:168:5)
    at Generator.withSource (/my-serv/node_modules/babel-generator/lib/printer.js:189:15)
    at Generator.print (/my-serv/node_modules/babel-generator/lib/printer.js:297:10)
    at Generator.printJoin (/my-serv/node_modules/babel-generator/lib/printer.js:366:12)
matAtWork commented 7 years ago

In your example, the variable 'x' is undefined. Fixing that works (see link below), however I suspect that the error you're seeing Babel trying to unwind the `for...of`` loop. Can I suggest testing with no transforms other than fast-async to check it works correctly? The following snippet works for me:

echo 'export default async function blowUp(obj) {
  if (obj) {
    for (const fk of Object.keys(obj)) {
     console.log(fk);
    }
  }
}

blowUp({a:1,b:2,c:4}) ;' | node tests/node_modules/babel-cli/bin/babel
async function blowUp(obj) {
  if (obj) {
    for (const fk of Object.keys(obj)) {
      console.log(fk);
    }
  }
}

blowUp({ a: 1, b: 2, c: 4 });

In all honesty, with no await in the code, the transform is pretty minor.

http://nodent.mailed.me.uk/#async%20function%20blowUp(obj)%20%7B%0A%20%20if%20(obj)%20%7B%0A%20%20%20%20for%20(const%20fk%20of%20Object.keys(obj))%20%7B%0A%20%20%20%20%20console.log(fk)%3B%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A%0AblowUp(%7Ba%3A1%2Cb%3A2%2Cc%3A4%7D)%20%3B~options~%7B%22mode%22%3A%22promises%22%2C%22promiseType%22%3A%22Zousan%22%2C%22noRuntime%22%3Afalse%2C%22es6target%22%3Afalse%2C%22wrapAwait%22%3Afalse%2C%22spec%22%3Afalse%7D

matAtWork commented 6 years ago

Closing this as there's no reproducible issue.