小编Zan*_*aes的帖子

在执行回调时,在Node.js中突破Q承诺?

请原谅承诺的概念,请原谅我的新生儿.我在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 !!!!!" 要打印....

callback node.js promise q

6
推荐指数
1
解决办法
971
查看次数

使用--nouse-idle-notification和其他标志永远启动Node.js

以前,我通过以下方式启动了我的生产节点应用:

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文件的情况下永远开始运行(例如,只输入"永远").如果我把标志放在"开始"命令之前,它似乎开始了,但我又不知道如何判断标志是否被接受......

有人可以用正确的语法帮助我吗?

node.js

6
推荐指数
2
解决办法
8671
查看次数

在javascript回调中引用"this"

有些东西一直困扰着我在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"变量传递回回调.

有没有更好的方法来解决这个问题?这种做法是邪恶的吗?

javascript node.js

6
推荐指数
2
解决办法
250
查看次数

带有短语的ElasticSearch Bool过滤器(而不是单个单词/标签)

在弹性搜索中,这个过滤器

{
  "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)

elasticsearch

6
推荐指数
1
解决办法
4569
查看次数

尽管体积小,ElasticSearch _bulk调用导致"套接字挂起"

我使用弹性来通过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)

node.js elasticsearch

6
推荐指数
0
解决办法
1352
查看次数

iOS:为UITableView预先计算行高

在我的项目中,我几个月来一直在努力.

这是交易:我有一个UITableView只有1个部分,但UITableViewCells的高度不同.每个UITableViewCell都代表一个对象,新对象不断变得可用,并插入到UITableView中.有效发现将在表中显示的新对象高度的唯一方法是绘制一次(运行绘制UITableViewCell的代码并查看生成的高度).

啊,但是有问题!UITableView委托方法tableView:heightForRowAtIndexPath:在第一次绘制单元格之前调用!这是有道理的:表格想要在绘制它们之前定位单元格.

我一直在试验LOTS并且只能找到两个选项,这两个选项都有重大缺点:

  1. 如果之前没有看到要在表格中显示的新对象,只需"猜测"高度并根据需要稍后(在绘制单元格之后)调整单元格的大小.这会导致滚动问题,因为当用户停止滚动时,可能需要将一个或多个单元格调整到正确的高度,这会在表格移动并重新组织时产生糟糕的用户体验.
  2. 通过在将对象插入UITableView之前"测试"对象来预先计算对象高度.当新对象变为可用时,创建一个"虚拟"UITableViewCell并将其绘制在屏幕外,从而计算对象的高度并保存以供日后使用.问题在于,当然,我们只能对主线程进行高度测试(因为我们需要绘制),这会导致应用程序出现严重延迟.

到目前为止,我的解决方案是使用#2,但试图通过使其高度测试仅每1/4秒发生一次来缓解问题,这有助于"空出"测试,以便主线程没有锁定太多.但是,该解决方案不够优雅,仍会导致滞后问题,尤其是在旧设备上.滞后很糟糕,我真的需要一个更好的解决方案.

iphone xcode objective-c ios

5
推荐指数
1
解决办法
3582
查看次数

Node.js内存泄漏,尽管Heap + RSS大小不变

根据我的服务器监控,我的内存使用量随着时间的推移逐渐增加:

在此输入图像描述

在正常运行约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)

我错过了什么?显然泄漏是在节点中,但过程似乎没有意识到它......

node.js

5
推荐指数
1
解决办法
1677
查看次数

使用MongoDB生成的_ids作为"秘密数据"(例如,OAuth令牌)

MongoDB _id字段是否足够随机/不可以充当秘密数据?

例如:如果我正在构建服务器端OAuth,我可以将_id用作用户的OAuth令牌吗?我想这样做是因为它为数据库提供了清洁度和可索引性(例如,"tokens._id"=> oauth_token).

检查MongoDB _id对象的结构,它们似乎确实是随机的,但我确实对一个恶意实体蛮力猜测一个人挥之不去.

mongodb

5
推荐指数
1
解决办法
1180
查看次数

使用 ModelBuilder 在 EFCore5 中播种多对多数据库?

关于在实体框架中播种多对多关系存在许多 问题。然而,它们中的大多数都非常古老,并且多对多行为在 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)

entity-framework-core .net-core

5
推荐指数
1
解决办法
3016
查看次数

是否可以将多操作系统映像从一个 docker 注册表复制到 Linux 计算机上的另一个?

我需要一种方法将我的清单和所有相关的 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)

containers docker buildah

5
推荐指数
1
解决办法
2258
查看次数