Luiz Felipe Frazão Gonçalves (2018-04-12T16:07:02.000Z)
*One new proposal for EcmaScript.*
Promised Functions

Like async/await, the promised functions would be preceded by a keyword. In
the case, promised, it would change the default behavior of the function,
making it behave as a promise.

I will use as an example a classic sleep function:

function sleep(forHowLong) {
  return new Promise((resolve, reject) => {
    setTimeout(function() {
      resolve();

      /**       * For reject:       *        * reject(Error('Some
error'));       */
    }, forHowLong);
  });
}

I think to avoid the huge amount of callbacks, there should be a syntax
similar to this:

promised function sleep(forHowLong) {
  setTimeout(function() {
    this.resolve(); // could even create a keyword like "resolve"

    /**     * For reject:     *      * this.reject(Error('Some error'));     */
  }, forHowLong);
}

Note that the hypothetical keyword "promised" before the function statement
makes it act as a promise.

Just a crazy idea I had. :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20180412/8c3e71b5/attachment.html>
luizfelipefrazaogoncalves at gmail.com (2018-04-12T16:08:53.040Z)
_One new proposal for EcmaScript._

# `Promised Functions`

Like `async/await`, the promised functions would be preceded by a keyword. In the case, `promised`, it would change the default behavior of the function, making it behave as a promise.

I will use as an example a classic `sleep` function:

```javascript
function sleep(forHowLong) {
  return new Promise((resolve, reject) => {
    setTimeout(function() {
      resolve();

      /**
       * For reject:
       * 
       * reject(Error('Some error'));
       */
    }, forHowLong);
  });
}
``` 

I think to avoid the huge amount of callbacks, there should be a syntax similar to this:

```javascript
promised function sleep(forHowLong) {
  setTimeout(function() {
    this.resolve(); // could even create a keyword like "resolve"

    /**
     * For reject:
     * 
     * this.reject(Error('Some error'));
     */
  }, forHowLong);
}
```

Note that the hypothetical keyword "promised" before the function statement makes it act as a promise.

Just a crazy idea I had. :)