The `for` loop approach works for synchronous resources as well actually, there's nothing special about those `await`ed things e.g.

```js
const fs = require('fs')

function* open(file, opts) {
    const fd = fs.openSync(file, opts)
    try { yield fd } finally { fs.closeSync(fd) }
}

for (const fd of open("/path/to/file", {mode: "r+"})) {
    const bit = fs.readSync(fd)
    ...
}
```

I can definitely imagine a Python-esque `with` statement though (perhaps with `Symbol.open/Symbol.close`) then you just use something like Python's contextlib (https://docs.python.org/3.7/library/contextlib.html) utility functions for converting generator based resources to `Symbol.open/Symbol.close`.

For now though the `for` loop approach is a relatively good workaround (as `next/return` effectively emulate Python's `__enter__/__exit__`).


On 30/12/16 04:17, Isiah Meadows wrote:
But keep in mind it still doesn't cover two key issues:

1. Synchronous resources do in fact exist (primarily in Node). You
need both for it to be effective.
2. Your suggestion isn't composable at all (like nearly every other
callback-driven API), and it prevents returning from inside the block
without the use of exceptions.
-----

Isiah Meadows
m...@isiahmeadows.com


On Thu, Dec 29, 2016 at 9:05 AM, Raul-Sebastian Mihăilă
<raul.miha...@gmail.com> wrote:
I agree, but note that a resolved promise is not the same as a fulfilled
promise (https://tc39.github.io/ecma262/#sec-promise-objects).

On Thu, Dec 29, 2016 at 11:40 AM, Jordan Harband <ljh...@gmail.com> wrote:
You'd need to wrap the body of your `open` function in a try/finally, and
do the `fsp.close` in the `finally` block - but otherwise that would
certainly work, provided that the promise returned from `func` did actually
settle (resolve or reject).


_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to