请教一个 Node.js 的代码组织问题

2014-05-06 08:55:40 +08:00
 Livid
对于 cache key A,如果在 redis ( https://www.npmjs.org/package/redis ) 中不存在,就通过 request ( https://www.npmjs.org/package/request ) 去某个 http 地址拿一个 json,然后如果这个 request 的 status_code 是 200 就将这个 JSON 以 cache key A 存入 redis。

如果 cache key A 存在,就取出来,通过 JSON.parse() 还原为对象。

然后代码继续,根据( 从 redis 里拿到的数据 或者 从 request 里拿到的数据 )执行下一步操作。

因为 Node.js 在 redis 和 request 这里都是异步 callback,我比较好奇像这样的情况在 Node.js 中最好的做法是?
5081 次点击
所在节点    Node.js
26 条回复
cfddream
2014-05-06 11:09:46 +08:00
楼上都把几种常用姿势说了,选择自己喜欢的、统一、好维护的风格。
bear
2014-05-06 11:18:59 +08:00
感觉Promise方式好像解决不了楼主的问题,它每次都会发出请求,而楼主是希望当内存里有,就不去请求,难道是我对Promise理解有误?
virushuo
2014-05-06 12:09:14 +08:00
callback或者 promise https://www.promisejs.org
cfddream
2014-05-06 13:31:11 +08:00
https://github.com/petkaantonov/bluebird 注重性能可以试试这个
arzusyume
2014-05-07 09:23:34 +08:00
@bear 我觉得可以呀,拿when举例

deferred = when.defer();
if (cache) {
process.nextTick(function() {deferred.resolve(cache);});
} else {
loadCache(function(err, data) {deferred.resolve(data);});
}
return deferred.promise;
rekey
2014-05-10 13:36:17 +08:00
@arzusyume 如果cache取不到就直接返回一个request的promise给业务方啊。

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

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

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

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

© 2021 V2EX