Node的异步转同步操作,还是觉得满足不了需求啊。。。。
发布于 8 年前 作者 jkiss 4534 次浏览 来自 问答

业务场景是这样的:我有一个函数 getValue(),从redis里面取值,如果有则返回(getValue貌似也要封装成Promise。。。),如果没有则用request去取然后再返回值。可是 request返回的值是在回调函数里面执行的,所以getValue如何同步返回回调函数里面的值呢?

11 回复

是返回值,不是返回Promise。。。

这没有同步什么事情,redis取值和request都是异步事件,所以你的需求很简单。先redis取值,在其回调内做value判定,如果有直接返回,如果没有做request请求,完事再返回;

function* gen(){ var url = ‘http://example.com’; var result = yield $.get(url, (data)=>{return data;}); console.log(‘gen’); }

如果用生成器的话,yield返回的只是xmlHttpRequest,并不能返回data。。。

如果用Promise的话,感觉就是把所有的逻辑用Promise串成一根线。。。

@jkiss yield后面去跟promise

@Galen-Yip 嗯,必须是Thunk或Promise,现在明白了,最后自己把业务封装成了Promise,初步测试没啥问题

很简单啊。 用co,然后这个函数用co.wrap封装起来

@klausgaoco的话,首先也得把FuncPromise封装起来,然后把业务逻辑写成 Generator ,然后用 co 去自动执行,对吧?

@i5ting 原来是Node Club的前辈,哈哈。其他的还行,就是那个并行还不是很理解,Gen应该也不是并行的吧?

回到顶部