Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更好地理解javascript';s产量 我在膝关节炎应用程序中有以下代码: exports.home = function *(next){ yield save('bar') } var save = function(what){ var response = redis.save('foo', what) return response }_Javascript_Generator_Koa - Fatal编程技术网

更好地理解javascript';s产量 我在膝关节炎应用程序中有以下代码: exports.home = function *(next){ yield save('bar') } var save = function(what){ var response = redis.save('foo', what) return response }

更好地理解javascript';s产量 我在膝关节炎应用程序中有以下代码: exports.home = function *(next){ yield save('bar') } var save = function(what){ var response = redis.save('foo', what) return response },javascript,generator,koa,Javascript,Generator,Koa,但是我得到了以下错误:TypeError:您可能只生成一个函数、承诺、生成器、数组或对象,但传递了以下对象:“OK” 现在,“ok”是来自redis服务器的响应,这很有意义。但是我不能完全掌握这类函数的生成器的概念。有什么帮助吗?根据下面的说明,应该在生成器函数中使用Yield。 其目的是返回迭代的结果,以便在下一次迭代中使用 如本例所示(摘自文档): 函数*foo(){ var指数=0; while(index您不会生成save('bar'),因为它是同步的。(确实要使用save吗?) 由于它

但是我得到了以下错误:
TypeError:您可能只生成一个函数、承诺、生成器、数组或对象,但传递了以下对象:“OK”


现在,“ok”是来自redis服务器的响应,这很有意义。但是我不能完全掌握这类函数的生成器的概念。有什么帮助吗?

根据下面的说明,应该在生成器函数中使用Yield。 其目的是返回迭代的结果,以便在下一次迭代中使用

如本例所示(摘自文档):

函数*foo(){
var指数=0;
while(index您不会生成
save('bar')
,因为它是同步的。(确实要使用save吗?)

由于它是同步的,您应该更改以下内容:

exports.home = function *(next){
  yield save('bar')
}
为此:

exports.home = function *(next){
  save('bar')
}
它将阻止执行,直到完成

几乎所有其他Redis方法都是异步的,因此您需要
产生
它们

例如:

exports.home = function *(next){
  var result = yield redis.set('foo', 'bar')
}

谢谢你的回答。函数调用实际上在一个生成器函数中,只是忘记了编写它。请检查我的编辑。你使用的是哪个redis软件包?我猜你使用的是常规的redis npm模块,它需要回调。请尝试返回承诺的co-redis。哦,不,我使用的是coRedis,连接的代码是以下内容:
var-redis=require(“redis”)、coRedis=require(“co-redis”)、db=redis.createClient()、dbCo=coRedis(db);module.exports=dbCo;
(在另一个文件中)感谢您的澄清。因此,在这种情况下,我不应该使用收益率。如果我想做一个
var-res=get('foo')呢;this.body=res
?我不也需要调用的收益率吗?您需要生成异步函数(这是Redis'API的大部分)。我认为
save
同步(一种特殊情况)让您感到困惑。既然Redis'GET是异步的,那么您将生成它:
var res=yield Redis.GET('foo'))
。我只知道redis.save是同步的,因为它在文档页面上用粗体字表示:。这有点像节点的
var text=fs.readFileSync('README.md')
(同步)与
fs.readFile('README.md',function(text){…})
(异步)之间的区别。这更有意义吗?
exports.home = function *(next){
  var result = yield redis.set('foo', 'bar')
}