请原谅承诺的概念,请原谅我的新生儿.我在Node.js中使用Q模块.我有一个函数,一旦它执行了所有必要的步骤就打算调用它.当我想从Q promise中调用回调函数时,会出现问题.
我想要的功能是当我到达最后一步时能够调用回调,而不再是在承诺链中.因此,回调将回到其原始操作.但是,正如我编写的那样,回调在promise的上下文中被调用.此时,如果回调(说)抛出错误,它会被此函数中的错误处理程序捕获,这不是我想要的!
var updateDataStream = function(data, input, posts, stream, callback) {
// Pack all the items up...
Q.ncall(data._packStream, data, posts, stream)
// Upsert the cache into the database
.then(function(){
return Q.ncall(data.upsert, data);
})
// buffer the new input
.then(function(res){
return Q.ncall(data.buffer, data, input);
})
.then(function(final){
callback(null, final);
})
.fail(function(err){
console.log('OHNOES!!!!!!!',err);
}).end();
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,回调函数中发生的错误会导致"OHNOES !!!!!" 要打印....
以前,我通过以下方式启动了我的生产节点应用:
NODE_ENV=production forever start index.js
Run Code Online (Sandbox Code Playgroud)
但是,根据这个问题中的建议,我想用--nouse-idle-notification启动节点.我还发现这篇关于设置--max-old-space-size等的文章.不幸的是,我没有人问过如何判断该标志是否实际上被节点接受,所以我不知道该如何判断如果我永远的语法是正确的.
此外,我不能永远接受这两个论点......
例如,如果我使用它
NODE_ENV=production forever start --max-old-space-size=8192 --nouse-idle-notification index.js
Run Code Online (Sandbox Code Playgroud)
我得到了"永久使用信息",好像我试图在没有传递.js文件的情况下永远开始运行(例如,只输入"永远").如果我把标志放在"开始"命令之前,它似乎开始了,但我又不知道如何判断标志是否被接受......
有人可以用正确的语法帮助我吗?
有些东西一直困扰着我在Javascript中进行面向对象编码的方式.当有回调时,我经常想引用最初调用该函数的对象,这导致我做这样的事情:
MyClass.prototype.doSomething = function(obj, callback) {
var me = this; // ugh
obj.loadSomething(function(err, result) {
me.data = result; // ugh
callback(null, me);
});
}
Run Code Online (Sandbox Code Playgroud)
首先,总是创建额外的变量对我来说太过分了.此外,我不得不怀疑它是否可能最终导致问题(循环引用?un-GCd对象?)通过将"me"变量传递回回调.
有没有更好的方法来解决这个问题?这种做法是邪恶的吗?
在弹性搜索中,这个过滤器
{
"bool": {
"must": {
"term": {
"article.title": "google"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正确退回标题中带有"google"的文章.
然而,
{
"bool": {
"must": {
"term": {
"article.title": "google earth"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
尽管在标题中有一些带有"google earth"字样的文章,但不会返回任何结果.我希望它能这样做.
完整查询:
{
"size": 200,
"filter": {
"bool": {
"must": {
"term": {
"article.title": "google maps"
}
}
}
},
{
"range": {
"created_date": {
"from": "2013-01-11T02:14:03.352Z"
}
}
}]
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有"查询" - 只是一个过滤器,大小和范围.所以我认为ElasticSearch正在使用默认的分析器......?
我有什么误会?
编辑:对于那些寻找解决方案的人,这是我的过滤器:
{
"query": {
"bool": {
"must": {
"must_match": {
"article.title": "google …Run Code Online (Sandbox Code Playgroud) 我使用弹性来通过node.js连接到ElasticSearch.
在使用Nodetime分析我的应用程序以尝试提高性能的过程中,我注意到一些奇怪的事情.我的ElasticSearch"PUT"对_bulk索引的请求经常导致"套接字挂起".此外,这些调用占用了大量的CPU时间.
我每次封盖指数_bulk要求@ 10项指标,你可以看到,这些请求的内容长度甚至没有达到是50 Kb,所以这是很难想象的是,大小是个问题.然而,响应时间> 60秒,CPU时间> 10秒!哎呀!

在尝试调试时,我开始在前台运行ElasticSearch.我注意到这个奇怪的错误:
[2013-02-27 11:42:39,188][WARN ][index.gateway.s3 ] [Lady Mandarin] [network][1] failed to read commit point [commit-f34]
java.io.IOException: Failed to get [commit-f34]
at org.elasticsearch.common.blobstore.support.AbstractBlobContainer.readBlobFully(AbstractBlobContainer.java:83)
at org.elasticsearch.index.gateway.blobstore.BlobStoreIndexShardGateway.buildCommitPoints(BlobStoreIndexShardGateway.java:847)
at org.elasticsearch.index.gateway.blobstore.BlobStoreIndexShardGateway.doSnapshot(BlobStoreIndexShardGateway.java:188)
at org.elasticsearch.index.gateway.blobstore.BlobStoreIndexShardGateway.snapshot(BlobStoreIndexShardGateway.java:160)
at org.elasticsearch.index.gateway.IndexShardGatewayService$2.snapshot(IndexShardGatewayService.java:271)
at org.elasticsearch.index.gateway.IndexShardGatewayService$2.snapshot(IndexShardGatewayService.java:265)
at org.elasticsearch.index.engine.robin.RobinEngine.snapshot(RobinEngine.java:1090)
at org.elasticsearch.index.shard.service.InternalIndexShard.snapshot(InternalIndexShard.java:496)
at org.elasticsearch.index.gateway.IndexShardGatewayService.snapshot(IndexShardGatewayService.java:265)
at org.elasticsearch.index.gateway.IndexShardGatewayService$SnapshotRunnable.run(IndexShardGatewayService.java:366)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: Status Code: 404, AWS Service: Amazon S3, AWS Request ID: ..., AWS Error Code: NoSuchKey, AWS Error Message: The specified key does not exist., S3 Extended …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我几个月来一直在努力.
这是交易:我有一个UITableView只有1个部分,但UITableViewCells的高度不同.每个UITableViewCell都代表一个对象,新对象不断变得可用,并插入到UITableView中.有效发现将在表中显示的新对象高度的唯一方法是绘制一次(运行绘制UITableViewCell的代码并查看生成的高度).
啊,但是有问题!UITableView委托方法tableView:heightForRowAtIndexPath:在第一次绘制单元格之前调用!这是有道理的:表格想要在绘制它们之前定位单元格.
我一直在试验LOTS并且只能找到两个选项,这两个选项都有重大缺点:
到目前为止,我的解决方案是使用#2,但试图通过使其高度测试仅每1/4秒发生一次来缓解问题,这有助于"空出"测试,以便主线程没有锁定太多.但是,该解决方案不够优雅,仍会导致滞后问题,尤其是在旧设备上.滞后很糟糕,我真的需要一个更好的解决方案.
根据我的服务器监控,我的内存使用量随着时间的推移逐渐增加:

在正常运行约4周后,它最终导致问题/崩溃(这是有道理的,因为我在EC2上使用m1.large实例=> 8GB RAM,并且RAM似乎以每周约1.5 GB的速度增加).
如果我重新启动我的node.js应用程序,内存使用情况将重置.然而......我正在通过process.memoryUsage(),甚至在约1周之后跟踪我的记忆使用情况,我看到了
{"rss":"693 Mb","heapTotal":"120 Mb","heapUsed":"79 Mb"}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?显然泄漏是在节点中,但过程似乎没有意识到它......
MongoDB _id字段是否足够随机/不可以充当秘密数据?
例如:如果我正在构建服务器端OAuth,我可以将_id用作用户的OAuth令牌吗?我想这样做是因为它为数据库提供了清洁度和可索引性(例如,"tokens._id"=> oauth_token).
检查MongoDB _id对象的结构,它们似乎确实是随机的,但我确实对一个恶意实体蛮力猜测一个人挥之不去.
关于在实体框架中播种多对多关系存在许多 问题。然而,它们中的大多数都非常古老,并且多对多行为在 EFCore5 中发生了显着变化。官方文档建议重写OnModelCreating以实现ModelBuilder.Entity<>.HasData().
然而,通过新的多对多行为(没有显式映射),我找不到明确的路径来播种中间表。为了使用本教程的示例,该类BookCategories现在是隐式的。因此,在播种时没有显式声明中间表值的路径。
我也尝试过简单地分配数组,例如:
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public ICollection<Category> Categories { get; set; }
}
public class Category
{
public int CategoryId { get; set; }
public string CategoryName { get; set; }
public ICollection<Book> Books { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后在种子时间:
Book book = new Book() { BookId …Run Code Online (Sandbox Code Playgroud) 我需要一种方法将我的清单和所有相关的 blob/等从私有注册表复制到公共注册表,其中图像以前从未被推送到公共注册表。
我通过 成功创建了多架构清单buildah。请注意,虽然图像是使用 buildah 构建的,但我对基于 docker 的方法在注册表之间复制最终结果感到满意。这是以下的输出buildah inspect:
{
"schemaVersion": 2,
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:e1c1de1b56adc07e5a97970b3340b1cf71c02796eb4e27c638634b6bcf0e510e",
"size": 5590,
"platform": {
"architecture": "amd64",
"os": "windows"
}
},
{
"mediaType": "application/vnd.oci.image.manifest.v1+json",
"digest": "sha256:c4bf2b94bbedceab3888544f4b966e8c1435231daeff27546acaf3b817485226",
"size": 511,
"platform": {
"architecture": "amd64",
"os": "linux"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
实际上,还会有更多的排列......但这个简单的清单说明了问题。
出于性能(以及其他各种)原因,我的 CI 将此映像推送到本地注册表。一旦我测试了最终的清单,我想将其docker.io使用相同的标签推送到公共注册表。
在将 Windows 添加到组合中之前,我能够通过拉取每个映像、使用新注册表重新标记它并推送来完成此任务。就像是...
buildah manifest create docker.io/img/name:latest
# Retag & add windows...
buildah pull myreg/img/name:windows
buildah tag myreg/img/name:windows docker.io/img/name:windows
buildah push docker.io/img/name:windows
buildah manifest …Run Code Online (Sandbox Code Playgroud) node.js ×5
.net-core ×1
buildah ×1
callback ×1
containers ×1
docker ×1
ios ×1
iphone ×1
javascript ×1
mongodb ×1
objective-c ×1
promise ×1
q ×1
xcode ×1