async/await
https://javascript.info/async-await
需要浏览器支持,后者使用webpack转换为ES5.
There’s a special Syntax to work with promises in a more comfortable fashion, called “async/await”. It’s surprisingly easy to understand and use.
Async functions
Let’s start with the
async
keyword. It can be placed before a function, like this:
async
function
f
(
)
{
return
1
;
}
The word “async” before a function means one simple thing: a function always returns a promise. Other values are wrapped in a resolved promise automatically.
For instance, this function returns a resolved promise with the result of
1
; let’s test it:
async
function
f
(
)
{
return
1
;
}
f
(
)
.
then
(
alert)
;
// 1
…We Could explicitly return a promise, which would be the same:
async
function
f
(
)
{
return
Promise.
resolve
(
1
)
;
}
f
(
)
.
then
(
alert)
;
// 1
So,
async
ensures that the function returns a promise, and wraps non-promises in it. Simple enough, right? But not only that. There’s another keyword,await
, that works only insideasync
functions, and it’s pretty cool.
Bluebirds-coroutine
http://bluebirdjs.com/docs/api/promise.coroutine.html
具有跨浏览器支持性,不需要使用webpack进行翻译。
实际上Node环境也支持。
@H_502_159@Promise.coroutine(GeneratorFunction(...arguments) generatorFunction, Object options) -> function
Returns a function that can use
@H_502_159@yield
to yield promises. Control is returned back to the generator when the yielded promise settles. This can lead to less verbose code when doing lots of sequential async calls with minimal processing in between. Requires node.js 0.12+, io.js 1.0+ or Google Chrome 40+.var Promise = require("bluebird"); function PingPong() { } PingPong.prototype.ping = Promise.coroutine(function* (val) { console.log("Ping?", val); yield Promise.delay(500); this.pong(val+1); }); PingPong.prototype.pong = Promise.coroutine(function* (val) { console.log("Pong!", val); yield Promise.delay(500); this.ping(val+1); }); var a = new PingPong(); a.ping(0);
Running the example:
@H_502_159@$ node test.js Ping? 0 Pong! 1 Ping? 2 Pong! 3 Ping? 4 Pong! 5 Ping? 6 Pong! 7 Ping? 8 ...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。