On 11/12/14, 4:10 PM, Kevin Smith wrote:

    The only thing they couldn't do (under this proposal) is expose
    the promise being used to userland (to eliminate the chance for
    userland to hold on to the promise and expect to be able to add an
    error handler at any time).


And lose the ability to combine the results of async functions with "all", "race", and any other promise combinator? That's a core strength of the current design.
A very good point.

Crazy, half-baked idea: Move the "forwards" vs "throws/logs" distinction to the callsite (in sync contexts only?) rather than the definition context as was described at the beginning of this thread.

The thought-process running along the lines of making the default behavior to log/report, but with an escape hatch when logging is *not* what you want. It's easier to notice an undesired log (and suppress it if necessary) than it is to notice that a log is *missing* in exceptional circumstances.

```javascript
async function asyncLibrary(data) {
  // ...
}

function doStuff() {
  // Becomes sugar for something like
  // asyncLibrary(badData).catch(err => {
  //   console.error(err);
  //   throw err;
  // });
  //
  // This makes logging-to-console the default
  var toplevelResult = asyncLibrary(badData);

  // No additional .catch() -- just pushes new syntax to discourage
// swallowed-by-default. When you want this "storing" behavior, you simply
  // opt-in to it via syntax (or a stdlib?) rather than opting out
  var storedResult = ^asyncLibrary(badData);

  // For combinators, you get something like:
  Promise.all([
    ^asyncLibrary(data1),
    ^asyncLibrary(data2)
  ]);
}

async function doOtherAsyncStuff() {
  // This stays status quo
  try {
    asyncLibrary(badData);
  } catch (e) {
    // caught!
  }
}
```

(Frankly the `^` syntax I used here seems a bit arcane to me -- but maybe someone can see through it and can think of a more expressive syntax?)

-Jeff

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to