求教个 nodeJS 异步改同步的写法

2018-12-24 13:48:02 +08:00
 daijinming

这里有段 nodeJS 代码,是数据库访问的方法,在编写 API 的时候需要访问数据库,但是如果异步访问数据库,在 API 中就返回不了,不知道有没有人可以帮助修改为同步访问数据库的方法?代码在这里: http://elef.top/2713914150342868278.code

4086 次点击
所在节点    程序员
19 条回复
xjp
2018-12-24 13:52:05 +08:00
不能
uxstone
2018-12-24 14:07:22 +08:00
lzvezr
2018-12-24 14:14:27 +08:00
想了一下好像真没什么好办法,async/await 那一套也只是返回 promise 而已
daijinming
2018-12-24 14:16:57 +08:00
@lzvezr 能不能请教下,我是 nodeJS 的新手,补充个问题,如果我要编写一个返回 JSON 结果的 API,API 中需要访问数据库,然后将数据库中的结果处理后,返回给 API 的调用客户端,这样的代码有什么规范吗?
TomVista
2018-12-24 14:17:07 +08:00
promise 和 await /async 自己百度吧.看看哪个合适
newghost
2018-12-24 14:18:15 +08:00
昏,传个回调函数不就结了…… 以前没写过 JS ?
TomVista
2018-12-24 14:18:16 +08:00
@lzvezr 感谢提醒 #5
lzvezr
2018-12-24 14:33:52 +08:00
@daijinming 如果是以库的形式,也就是客户端需要加载你这个程序,一般来说就 callback(比较通用,客户端可以自己封装成 promise)或者直接返回 promise
如果是客户端发一个网络请求,你返回 JSON 的这种网络 api,你怎么处理都可以,最后返回 JSON(字符串形式)就行了
oyosc
2018-12-24 14:36:30 +08:00
目测楼主没写过 nodejs 吧,讲道理现在 promise,async,或者直接 callback 都可以解决了吧,还有 yield 等...
1010543618
2018-12-24 14:57:41 +08:00
1010543618
2018-12-24 15:04:49 +08:00
调用其他生成器函数:用 yield* 转移控制
调用 promise:作为 yield 的语句,等 promise 有结果了再调用生成器函数的 next
Desiree
2018-12-24 15:12:34 +08:00
如果要操作数据库的,最好还是用 async 比较好,因为你很难用 callback 去看清楚你每次查询的步骤,操作起来十分麻烦。而且当你做多级查询的时候会觉得嵌套很复杂,加大代码阅读的难度。
whypool
2018-12-24 15:19:16 +08:00
async function ......

const a = await 异步回调的 return 方法
plqws
2018-12-24 15:52:23 +08:00
Promise async/await 这两个概念懂了就知道怎么写了
fortunezhang
2018-12-24 16:48:40 +08:00
如果遇到经常性改动的话,急用 aysnc/await,否则用 promise。
如果对性能要求比较高的话,用 callback
lovedebug
2018-12-24 16:52:04 +08:00
设一个标志,用 setTimeout 或者 setInterval 周期性检查一下
deepred
2018-12-24 19:54:32 +08:00
Pastsong
2018-12-24 20:15:09 +08:00
请求的结果不需要在一次 loop 中返回啊。。异步才是 node 的精髓。。
daijinming
2018-12-25 09:01:51 +08:00
@deepred 谢了朋友

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520447

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX