throwif operator
T.J. Crowder
tj.crowder at farsightsoftware.com
Wed Apr 12 05:48:09 UTC 2017
I'd like `throw` expressions (a lot). I wouldn't use them for this, but I
want them for many of the same reasons outlined in the C# case for them.
-- T.J. Crowder
On Wed, Apr 12, 2017 at 1:10 AM, Ron Buckton <Ron.Buckton at microsoft.com>
wrote:
> I’d much rather see something more like C# 7’s throw expressions:
> https://docs.microsoft.com/en-us/dotnet/articles/csharp/
> whats-new/csharp-7#throw-expressions
>
>
>
> ```js
>
> // original example
>
> fs.writeFile("message.txt", "Hello Node.js", err => err ? throw err :
> console.log("The file has been saved.");
>
>
>
> // better example
>
> function choose(kind) {
>
> return kind === 0 ? choseZero() : kind === 1 ? chooseOne() : throw new
> Error("out of range");
>
> }
>
> ```
>
>
>
> Ron
>
>
>
> *From:* es-discuss [mailto:es-discuss-bounces at mozilla.org] *On Behalf Of *T.J.
> Crowder
> *Sent:* Tuesday, April 11, 2017 5:20 AM
> *To:* Elie Rotenberg <elie at rotenberg.io>
> *Cc:* Нурбек <nurbek.ab at gmail.com>; es-discuss <es-discuss at mozilla.org>
> *Subject:* Re: throwif operator
>
>
>
> I don't think we need a new keyword for this, both because of Elie's point
> about handling it with a `throwif` function, and because Node's callback
> pattern is a bit old-fashioned in the world of promises and async/await.
> Until the Node API is updated to support promises natively, you can use one
> of the various "promisifying" libs to promisify the API:
>
>
>
> ```js
>
> const pfs = /*...promisified version of fs*/;
>
> ```
>
>
>
> ...and then:
>
>
>
> ```js
>
> pfs.writeFile("message.txt", "Hello Node.js")
>
> .then(() => console.log("The file has been saved."));
>
> ```
>
>
>
> ...and like your original code snippet, it will (on recent versions)
> terminate Node if you don't handle the error.
>
>
>
> Combined with `async`/`await`, it becomes even cleaner:
>
>
>
> ```js
>
> await pfs.writeFile("message.txt", "Hello Node.js");
>
> console.log("The file has been saved.");
>
> ```
>
>
>
> (Of course, that has to be within an `async` function.)
>
>
>
> -- T.J. Crowder
>
>
> On Tue, Apr 11, 2017 at 1:15 PM, Elie Rotenberg <elie at rotenberg.io> wrote:
>
> const throwIf = (fn) => (err, ...args) => {
>
> if(err) throw err;
>
> return fn(...args);
>
> };
>
>
>
> ...
>
>
>
> fs.writeFile('message.txt', 'Hello Node.js', throwIf(() =>
> console.log('The file has been saved')));
>
>
>
>
>
> No need to extend the language and preempt keywords with stuff you can
> very easily implement in userland.
>
> I'm not even convinced such a construct would be a good idea anyway to
> encourage rethrowing errors without thinking if it can be handled locally.
>
>
>
> On Tue, Apr 11, 2017 at 2:06 PM, Нурбек <nurbek.ab at gmail.com> wrote:
>
> An example from node.js documentation:
>
> fs.writeFile('message.txt', 'Hello Node.js', (err) => {
> if (err) throw err;
> console.log('The file has been saved!');
> });
>
> This looks like a common way to handle errors when the first parameter is
> an instance of Error.
>
> Yes, this line of code is short and easy to copy-paste.
> But introducing something like this:
>
> fs.writeFile('message.txt', 'Hello Node.js', (err) => {
> throwif err;
> console.log('The file has been saved!');
> });
>
> would make the code much cleaner and bring some sort of standart way to
> handle such errors.
>
>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.mozilla.org%2Flistinfo%2Fes-discuss&data=02%7C01%7Cron.buckton%40microsoft.com%7Cf2cf33458e3a466e917708d480d52f9b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636275100507832377&sdata=BZKPMSUjyLwQJr8fNltJnVFt4%2F8wLcLqHop92DUoW1U%3D&reserved=0>
>
>
>
>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fmail.mozilla.org%2Flistinfo%2Fes-discuss&data=02%7C01%7Cron.buckton%40microsoft.com%7Cf2cf33458e3a466e917708d480d52f9b%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636275100507832377&sdata=BZKPMSUjyLwQJr8fNltJnVFt4%2F8wLcLqHop92DUoW1U%3D&reserved=0>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20170412/8e60ecbe/attachment.html>
More information about the es-discuss
mailing list