V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
daijinming
V2EX  ›  程序员

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

  •  
  •   daijinming · 2018-12-24 13:48:02 +08:00 · 4067 次点击
    这是一个创建于 2166 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    const a = await 异步回调的 return 方法
    plqws
        14
    plqws  
       2018-12-24 15:52:23 +08:00
    Promise async/await 这两个概念懂了就知道怎么写了
    fortunezhang
        15
    fortunezhang  
       2018-12-24 16:48:40 +08:00
    如果遇到经常性改动的话,急用 aysnc/await,否则用 promise。
    如果对性能要求比较高的话,用 callback
    lovedebug
        16
    lovedebug  
       2018-12-24 16:52:04 +08:00
    设一个标志,用 setTimeout 或者 setInterval 周期性检查一下
    deepred
        17
    deepred  
       2018-12-24 19:54:32 +08:00   ❤️ 1
    Pastsong
        18
    Pastsong  
       2018-12-24 20:15:09 +08:00
    请求的结果不需要在一次 loop 中返回啊。。异步才是 node 的精髓。。
    daijinming
        19
    daijinming  
    OP
       2018-12-25 09:01:51 +08:00
    @deepred 谢了朋友
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1079 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:29 · PVG 06:29 · LAX 14:29 · JFK 17:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.