异步return的问题.
发布于 8 年前 作者 fangker 5000 次浏览 来自 问答

希望大神别喷我,别打我,问题如下: QQ截图20160425201946.png 如何让mysql异步里的option return成为checkname的返回值。不使用callback。 现在这样写就直接返回定义的null了,内部还没来得及执行。 求指导,谢谢

21 回复

这个真没有

@gzhangzy 真没有?

10元红包求解决方案。

既然是异步,说明就不能直接 return,如果你需要并行串行之类的,只能使用 Promises、Async 之类的来解决

@WelkinWong 用闭包,不能解决么?

@fangker 没看懂,再怎么闭包,你也不能把异步改成同步的吧,你可以给 checkname return一个promises 接口,当然最终使用者也是需要用 callback function 来取数据

@WelkinWong 好的,谢谢帮助

不能,因为这是违反大自然规律的。

你想“马上立即立刻”获取一个“将来”才能得到的东西,可能吗?

为什么闭包也不行?

因为:闭包能做到的是将本轮事件循环中的值保存下来,给回调函数用(后续的事件循环)。本质上还是保存现在的东西给将来用,跟你的需求正好相反。闭包貌似是个很高深的东西,但它不是万能的!

来自:https://github.com/manxisuo

为什么一定要return 自豪地采用 CNodeJS ionic

可以看看我写的这个,优点就是简单,https://cnodejs.org/topic/571a291535af8a704195f2d3

@fangker 你这是什么乱七八糟的,读个文件让你变成遛弯了。

@fangker
你用Generator和Promise是可以的。你这段代码就是co的简版。你去看一下co的源码就知道了。

来自:https://github.com/manxisuo

@gzhangzy 是的呀。要就一直 callback,要就用 generator 统一掉,它这么混着写看起来比各种写法都乱。

@captainblue2013 看了es6那个流程规划就想玩一玩…

@manxisuo 好的谢谢

@alsotang 谢谢指导

@captainblue2013 因为前面有个function* longRunningTask() { var value1 = yield step1(); var value2 = yield step2(value1); var value3 = yield step3(value2); } 这样的东西,每个函数要有返回值

@fangker generator yield都用了,果断用Promise啊

本来callback就是一大特色,而JS自己想美化这个问题,都一直没有非常优雅的方式,

回到顶部