小弟现在在开发一个内部系统,是基于 Nodejs 的,因为本人后端经验不足,请求大家帮助。
需求是:现在调用一个接口,这个接口会调用一个 npm 模块,这个模块是一个异步的。
问题:
- 我怎么调用这个 npm 模块
- 并且在调用任务完成后知道已经完成
如果上述问题解决了,怎么如何保证同时调用调用这个服务不冲突呢。
希望大家不吝赐教。
很多方案:
- callback
- promise
- co
- async/await
推荐 async/await
@htoooth 不是不知道这些异步方法,而是不清楚怎么调用服务
如果是http协议的接口 可以使用request或者node-fetch模块来调用
服务啥协议,http?RPC?每个协议调用方法不一样,如果服务响应时间太长的话你可以自己设置一个callback url,类似支付那种,不考虑的话异步方法楼上基本都说全了
@qiu363 是这样的,我需要在每一次请求中,调用一个 npm 包。这个包会分析请求中查询到的数据,产生一系列图片,还要上传到 CDN 上。这个过程大概会花1分钟左右,那么,我就想问,还是用 async / await 来做么。这样,Node 程序会不会卡死在这一步?
@riskers 如果你调用的包和你的代码都是异步的 用async/await来做,最多也只是卡死你当前任务,其他任务还是会继续接进来的
@riskers NODE程序不会卡死,不过你这个请求得等1分钟左右才能响应
首先你这个接口是一个node程序还是http的接口 node的脚本直接require不就行咯? 如果是另外的程序,http的话,那直接用http通讯模块访问及具体地址; 如果是另外的进程,启用子进程,然后进程通讯child_process.fork可以去了解下。
@qiu363 好的,谢谢
这种耗时比较长的任务,还是使用消息队列来完成更合适,例如 http://www.rabbitmq.com/ , 长时间等待响应不易监控和排查问题
@mengdu 是一个 Node 全局模块,执行一次要一分钟左右。你觉得怎么样比较好