问题标签 [co]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 如何在 express 中使用 co 全局处理错误
我是 nodejs 和 co 的新手。我在 express 中使用 co,如下所示,因为它更像是我在 c# 中习惯的异步等待,而且我认为代码更具可读性。
问题是每次我调用 co 时,我都必须在 catch 函数中处理异常。我想在全局范围内处理异常,也许在中间件中。但据我所知, co 会吞下未处理的异常,因此我必须在每次调用 co 时处理 catch。
我想出的一种可能的解决方案是将 co 包装在一个函数中,该函数会自动处理 catch 函数中的异常,并改用该包装函数。就像是:
有没有更好或更标准的方法?
javascript - 如何将 co 与命名函数一起使用?
所以我试图用来co
包装返回承诺的MongoDB方法,例如
http://mongodb.github.io/node-mongodb-native/2.0/reference/ecmascript6/crud/
我看到co
像这样使用:
这似乎是一个匿名函数。在代码的主体中很好,但是有没有办法获得内部产生的值?例如,基本上得到co
例程的结果:
如果我能做到:
然后在其他地方
但我明白了
也试过:
...
但仍然没有运气。
javascript - 使用同步代码中的 co 和承诺(mongoDB 示例)
如何使用 co() 包装函数与普通同步代码集成?
例如,我已经co.wrap
ped 这个函数使用 yield 在 mongo 上调用异步方法:
这是用这个调用的:
它给出了如下的日志:
TopicsResponse collName +3s Topics
TopicsResponse topic +2ms Promise { <pending> }
TopicsResponse res +1ms { _id: 56d6bdd93cf89d4082e1bd27,
cname: 'nodejs',
username: 'bob' }
TopicsResponse topic.then +1ms Promise { undefined }
所以在co.wrapped
方法内部, res 有真实的数据:{ cname: nodejs }
等等。但它返回/返回的内容是未定义的。
我认为这与生成器函数产生一个承诺有关..
我也试过了
返回
是否有可能以这种方式使用 co 来使异步代码看起来/运行像同步代码?我见过的其他示例只是将所有内容都放在顶层 co() 中,例如http://mongodb.github.io/node-mongodb-native/2.1/api/Collection.html#find
更新,这使用承诺:
但我想将所有丑陋的承诺包装.then()
代码推入库中,而不必将它撒在我的应用程序中......
javascript - NodeJS 生成器永远不会到达某一行?
我正在co
运行一个生成器函数,该函数对数据进行一些抓取和清理。但是,在循环之后,我永远不会到达代码的某个部分。这是我的代码的样子:
我从来没有在函数结束时到达控制台语句
javascript - Javascript - 使用生成器而不是承诺
假设我有以下功能:
我可以运行它们:
大约需要 3 秒。
现在我想使用生成器运行这些函数:
由于我需要 f1 的解析值来调用 f2 我将等待 f1 完成。这需要 5 秒。我怎样才能获得相同的 3 秒但使用生成器?
javascript - _.find 是否返回对对象的引用?如何正确设置结果的属性?
我使用 lodashfind
从数组中查询对象,然后设置该对象的属性,但是当我在设置此属性后打印出数组时,它没有改变。
对于在 JavaScript 中使用 lodash 处理对象方面更有经验的人的一些评论,我将不胜感激。也可以随意评论我提出问题的方式或编辑内容以使其更容易通过搜索引擎被其他人搜索。
隔离代码:
结果,这是来自的输出console.log
:
预期的结果,看最后的打印,我想在对象起源的数据结构中修改这个对象:
公共要点,也可以在这里发表评论。我希望这个问题对其他人也有用。
编辑 Lodash引用说Returns the matched element, else undefined.
我不确定这是否意味着它返回克隆对象或对查询对象的引用。
arrays - koajs 多部分表单发布,在发送回复之前提取 zip
我将 koajs 用于我的界面 我有一个表格,其中包含 1 到 x 附加的 zip 作为文件
我们如何在 koa 发送回复之前对这些文件进行循环以提取它们:/?
这是我尝试过的(不太了解,所以可能很糟糕:p)
}
结果暂时我有
如您所见,在循环完成之前我有 -> POST /courses/add 200 2,229ms 22.57kb
一个想法?
谢谢
javascript - 从承诺中获得拒绝
我想保留错误func()
reject
,而不是直接onError()
选择,
之前我总是让func()
resolve
,然后确定返回结果yield func()
,
如果我想直接onError()
使用throw ..;
想知道任何更好的想法我可以让func()
reject
但决定之后yield func()
,直接onError()
或不
javascript - 找不到 koa.js 研讨会解决方案的解释,练习一
它必须相当简单,但我无法理解koa Workshop 开始练习的解决方案。
考试:
解决方案和任务:
我对这个测试的看法是:co
库为我们运行生成器函数,fs.stat(__filename)
调用,返回
然后,我只有一个问题:为什么匿名函数fs.stat()
会在同一个地方返回,它在哪里需要done
回调?我已经记录了这个回调,它是next()
带有对象作为传递参数的生成器方法stats
,但是我找不到任何关于回调注入的信息co
。这是如何运作的?先感谢您。
node.js - 在中间件之外创建 co-sqlite3 db 对象的正确方法
我正在尝试在我的 koa 应用程序中实现一个数据库访问层。这工作正常:
但我不想将数据库暴露给应用程序中的每个中间件。为了防止这种情况,我尝试.setup()
在中间件之外运行:services.setup();
定义为:
这些models
对象只有运行脚本来创建博客文章和用户表。
给我带来麻烦的行是var database = yield sqlite3(this.file);
它给了我以下错误:
我想这是对的,因为没有什么可以yield
转发的。但是当我制作setup()
一个生成器函数时,它不会执行。同样,当我删除该yield
语句时,它告诉我database.run is not a function
.
我坚持这一点,无法弄清楚如何正确实施它。
编辑:
如果我创建.setup()
一个生成器函数并进行所有database
调用yield
,那么它会创建表并按预期执行所有内容......
但是我不想将数据库暴露给所有其他中间件,所以我又回到了同样的原始问题。
如何在co-sqlite3
不将其包含在中间件中的情况下设置数据库?