1
scarlex 2017-02-09 18:00:06 +08:00 1
直接返回 promise
|
2
believeitcould 2017-02-09 18:07:59 +08:00
es7 async await
|
3
yiyizym 2017-02-09 18:11:23 +08:00
这不就是同步执行么?
还用什么 Promise ? |
4
finian 2017-02-09 18:20:15 +08:00
callback, promise, rx, async/await 任君选择
|
5
owt5008137 2017-02-09 18:25:42 +08:00 via Android
好像只能回调,或者看下是否已支持 await
|
6
zgoing OP @yiyizym
@finian @owt5008137 正在练手 koa ,用了 npm 里一个 google translate 的包,它返回的就是一个 promise ,我想把这个 promise 的结果传给 koa 路由,然后就不知道了。。。 |
7
rogerchen 2017-02-09 19:12:26 +08:00
promise 不是有 then 么,把后续逻辑写在 then 里边不就好了, poorman's await 。
|
8
abramstyle 2017-02-09 19:27:22 +08:00
路由就是 async 的,或者如果是 koa 1 那么就是 generator ,都支持异步。
给你个例子吧: 比如这个 controller : koa1: ```js a: function() * { const result = yield fetchTranslate(); this.data = result; } ``` koa 2: ```js async a(ctx, next) { const result = await fetchTranslate(); ctx.data = result; } ``` 没测试,可能有语法错误,大概就是这么个意思。 |
9
Jeepeng 2017-02-09 19:48:57 +08:00
function fn() {
return new Promise((resolve, reject) => { // do something resolve() }) } |
10
Sparetire 2017-02-10 01:22:18 +08:00 via Android
异步是会传染的,最好 async 其次 co+generator ,或者把这个函数也 promise 化返回,最次 callback
|
11
zgoing OP @abramstyle 非常感谢,你的代码解决了我的问题。可是我还是没有弄懂 koa 为什么会自动执行 promise 里的 resolve(),希望能帮帮我,谢谢
|
12
abramstyle 2017-02-10 09:53:13 +08:00 1
因为 async 会创建一个异步函数,这时候如果在 promise 前加上 await 那么就会等待这个 promise 完成再继续执行。
generator 同理。不过 generator 先出现,但是因为 async/await 是 ES7 的东西,所以大家都跳过 generator 直接用上了 async/await. 这两个概念理解起来可能有点费劲,具体你可以找一些文章来学习一下 async/await 和 generator 。比如 https://ponyfoo.com/articles/understanding-javascript-async-await |
13
libook 2017-04-07 00:20:12 +08:00
函数里不能等 promise resolve 之后再返回,但是可以在 resolve 执行之前返回这个 promise 对象,让调用这个函数的程序拿到返回的 promise 再调用其 then 等方法拿到回调函数。
```javascript function f() { return new Promise((resolve, reject) => { // 做其他事 resolve(); }) ; } let thePromise=f();// 这一句是执行 f 函数,返回了一个 Promise 对象,复制给 thePromise 变量 thePromise.then(function(){ // 这里就是在 f 函数的 resolve 执行完之后才执行的程序。 }); ``` |