
下列代码
/* a */ getXXX(function(){ /* b */ }); /* c */ 如何让 c 在 b 后执行呢?
1 asdf123101 May 14, 2018 via Android 把 c 直接放到 b 后面不好吗 |
2 pheyer May 14, 2018 via iPhone Await/async 了解一下 |
3 bucky May 14, 2018 把 c 传进去 |
4 dablwow May 14, 2018 c 不是自然在 b 后面吗?还是我理解错了?  |
6 zzNucker May 14, 2018 getXXX 写成 generator 或者 async |
7 LancerComet May 14, 2018 ``` getName((error: Error, name: string) => { getAge((error: Error, age: number) => { const data = { name. age } sendData(data, (error: Error) => { // ... }) }) }) function getName (callback: (error: Error, name: string) => void) {} function getAge (callback: (error: Error, age: number) => void) {} function sendData (data: { name: string, age: number }, callback: (error: Error) => void) {} ``` ``` (async () => { try { const name = await getName() const age = await getAge() await send({ name, age }) } catch (error) { // ... } })() function getName (): Promise<string> {} function getAge (): Promise<number> {} function sendData (data: { name: string, age: number }): Promise<void> {} ``` |
8 brickyang May 15, 2018 via iPhone 一劳永逸的办法是用 Promise 把 getXXX 函数包一层,变成 getXXXAsync(),以后就能像同步一样使用它了,岂不美哉? |
9 Torpedo May 15, 2018 via Android 不是回调都是异步。 getxxx 如果是同步函数就是 abc,异步操作才是 acb。所以这样不能保证顺序。 使用 promise 可以保证你那部分代码是"异步的" 至于把 getxxx 变成同步,除了 aync await 语法糖之外是不行的。毕竟 js 异步模型就是事件循环,阻塞 js 线程是明显出问题的 |
12 tushankaka May 16, 2018 via Android 2 楼大哥说的对。promise, asyc/await 可以完美解决。 |