CNode

Node的异步转同步操作,还是觉得满足不了需求啊。。。。

问答
Jjkiss发布于10 年前最后回复10 年前11 回复5427 浏览0 收藏

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

查看回复

回复 (11)

I
i5ting#1·10 年前

all.png

J
jkiss#2·10 年前

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

H
haozxuan#3·10 年前

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

E
Emeryao#4·10 年前
J
jkiss#5·10 年前

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

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

J
jkiss#6·10 年前

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

J
jkiss#8·10 年前
引用 Galen-Yip@jkiss yield后面去跟promise

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

K
klausgao#9·10 年前

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

J
jkiss#10·10 年前
引用 klausgao很简单啊。 用co,然后这个函数用co.wrap封装起来

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

J
jkiss#11·10 年前
引用 i5ting

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

参与回复
登录后即可参与回复。登录