小编Ale*_*exD的帖子

如果未能及时完成NodeJS超时承诺

如何在一定时间后超时承诺?我知道Q有一个承诺超时,但我使用的是本机NodeJS承诺而且它们没有.timeout函数.

我错过了一个或其包装不同吗?

或者,下面的实现是否有利于不吸收内存,实际上按预期工作?

我也可以以某种方式将其全局包装,以便我可以将它用于我创建的每个承诺,而不必重复setTimeout和clearTimeout代码?

function run() {
    logger.info('DoNothingController working on process id {0}...'.format(process.pid));

    myPromise(4000)
        .then(function() {
            logger.info('Successful!');
        })
        .catch(function(error) {
            logger.error('Failed! ' + error);
        });
}

function myPromise(ms) {
    return new Promise(function(resolve, reject) {
        var hasValueReturned;
        var promiseTimeout = setTimeout(function() {
            if (!hasValueReturned) {
                reject('Promise timed out after ' + ms + ' ms');
            }
        }, ms);

        // Do something, for example for testing purposes
        setTimeout(function() {
            resolve();
            clearTimeout(promiseTimeout);
        }, ms - 2000);
    });
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript settimeout node.js promise

35
推荐指数
4
解决办法
4万
查看次数

NodeJS Express对URL进行编码 - 如何解码

我正在使用NodeJS和Express,当我在URL中使用外来字符时,它们会自动进行编码.

如何将其解码回原始字符串?

在调用NodeJS之前,我转义了字符.

所以字符串: ?????

%u05D0%u05D5%u05D1%u05DE%u05D4

整个网址现在看起来像: http://localhost:32323/?query=%u05D0%u05D5%u05D1%u05DE%u05D4

现在在我的NodeJS中,我得到了转义字符串%u05D0%u05D5%u05D1%u05DE%u05D4.

这是相关代码:

var url_parts = url.parse(req.url, true);
var params = url_parts.query;
var query = params.query; // '%u05D0%u05D5%u05D1%u05DE%u05D4'
Run Code Online (Sandbox Code Playgroud)

我试过urlquerystring库,但似乎没有什么适合我的情况.

querystring.unescape(query); // still '%u05D0%u05D5%u05D1%u05DE%u05D4'
Run Code Online (Sandbox Code Playgroud)

escaping node.js express

24
推荐指数
2
解决办法
3万
查看次数

始终以管理员身份通过ConEmu运行cmd

我正在使用ConEmu,我希望我的cmds 始终管理员身份运行.

我已经更改了强制所有cmd运行通过ConEmu的设置,因此在Windows运行中输入'cmd'将打开ConEmu(设置 - >集成 - >默认术语 - >强制ConEmu作为默认终端)

尝试更改(设置 - >启动 - >命令行)cmd.exe -new_console:a适用于快捷方式,但不更改默认值(从运行中运行cmd或在ConEmu中打开新选项卡)

谢谢

cmd admin conemu

14
推荐指数
3
解决办法
9255
查看次数

RabbitMQ with NodeJS - 使用 amqplib 获取消息计数

如何获取当前排队的消息数?

我的代码基本上如下:

function readQueue() {
    var open = require('amqplib').connect(config.rabbitServer);

    open.then(function (conn) {
        var ok = conn.createChannel();
        ok = ok.then(function (ch) {
            ch.prefetch(config.bulkSize);

            setInterval(function () {
                handleMessages();
            }, config.bulkInterval);

            ch.assertQueue(config.inputQueue);
            ch.consume(config.inputQueue, function (msg) {
                if (msg !== null) {
                    pendingMessages.push(msg);
                }
            });
        });
        return ok;
    }).then(null, console.warn);
}
Run Code Online (Sandbox Code Playgroud)

我在文档中或调试时没有发现任何内容,并且我确实看到了允许此操作的不同库,因此想知道 amqplib 是否也支持此操作。

rabbitmq node.js

8
推荐指数
2
解决办法
1万
查看次数

用于匹配任何语言的 HashTags 的正则表达式

我的应用程序中有一个字段,用户可以在其中输入主题标签。\n我想验证他们的输入并确保他们输入正确的主题标签。\n它可以采用任何语言,并且前面不应带有# 符号。 \n我正在用 JavaScript 编写。

\n\n

所以以下是很好的例子:

\n\n
    \n
  • Abcde45454_fgfgfg(很好,因为:只有字母、数字和 _)
  • \n
  • 2014_is-the-year(很好,因为:只有字母、数字、_ 和 -)
  • \n
  • \xd7\x91\xd7\xa8_\xd7\xa8\xd7\xa4\xd7\x90\xd7\x9c\xd7\x99 (好,因为:只有字母和 _)
  • \n
  • \xd0\xb0\xd1\x80\xd0\xb1\xd1\x83\xd0\xb7 (好,因为:只有字母)
  • \n
\n\n

以下是不好的例子:

\n\n
    \n
  • 丹·布朗(不好,因为有空格)
  • \n
  • 我的天啊!!!!!(不好是因为有!)
  • \n
  • \xd7\x91\xd7\xa8 \xd7\xa8\xd7\xa4@\xd7\x9c\xd7\x99 (不好,因为有 @ 和空格)
  • \n
\n\n

我们有一个仅匹配 a-zA-Z0-9 的正则表达式,我们需要添加语言支持,因此我们将其更改为忽略空格并忘记忽略特殊字符,所以我在这里。

\n\n

我看到过一些其他 StackOverflow 示例,但对我不起作用:

\n\n
    \n
  1. 其他语言无法使用
  2. \n
  3. 再次强调,只有英文
  4. \n
\n\n

[编辑]

\n\n
    \n
  • 添加了为什么坏就是坏、好就是好的解释
  • \n
  • 我不需要前面的 # 字符,但如果我想在开头添加 #,它应该是有效的主题标签\n\n
      \n
    • 基本上我不想允许任何特殊字符,例如 !@#$%^&*()=+./,[{]};:\'"?><
    • \n
  • \n
\n

javascript regex multilingual hashtag

7
推荐指数
1
解决办法
3439
查看次数

canvas.getImageData + canvas.putImageData的性能问题

我正在调用getImageData/putImageData,它会导致我的Chrome进程填满,直到它达到2.5Gb内存时崩溃.

我正在使用带有传单热图插件的simpleheat.js来在画布上显示热图.

基本上,我正在调用绘图fn以建立"随时间变化的热图"效果.我处理每个运行的数据(每个getImageData/putImageData)是4Mb,而以10-20 fps调用.

我想知道如何优化这段代码.我对使用画布知之甚少.

这是相关的代码simpleheat.js:

draw: function() {
    ...
    var colored = ctx.getImageData(0, 0, this._width, this._height);
    this._colorize(colored.data, this._grad);
    ctx.putImageData(colored, 0, 0);
},
_colorize: function (pixels, gradient) {
    for (var i = 0, len = pixels.length, j; i < len; i += 4) {
        j = pixels[i + 3] * 4; // get gradient color from opacity value

        if (j) {
            pixels[i] = gradient[j];
            pixels[i + 1] = gradient[j + 1];
            pixels[i + 2] = …
Run Code Online (Sandbox Code Playgroud)

javascript google-chrome canvas heatmap leaflet

7
推荐指数
1
解决办法
532
查看次数

多线程应用程序实际上是否比单线程应用程序更快?

一切都完全是理论上的,这个问题刚想到,我不完全确定答案是什么:

假设您有一个计算4个独立计算的应用程序.(完全独立,无论你做什么顺序并且你不需要计算另一个).还假设这些计算是长(分钟)和CPU绑定(不等待任何类型的IO)

1)现在,如果你有一个1处理器的计算机,单个线程应用程序在逻辑上会比多线程应用程序更快(或相同).由于计算机无法使用一个处理器一次做多件事,因此会浪费时间进行上下文切换等.到现在为止还挺好?

2)如果你有一台4处理器的计算机,4线程的速度通常比单线程更快.对?您的计算机现在可以一次执行4个操作,因此将您的应用程序划分为4个线程是合乎逻辑的,并且它应该以4个计算中最长的时间完成.到目前为止仍然很好?

3)现在我感到困惑的实际部分 - 为什么我的应用程序创建的线程数多于可用的处理器数量(实际上是核心数)?我已经编程并且已经看到了创建数十个和数百个线程的应用程序,但实际上 - 对于普通计算机来说,完美的数字大约为8?

PS我已经读过这个:线程与单线程 但没有安静的回答.

干杯

multithreading cpu-cores processors

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

Elasticsearch批量索引 - 仅在存在时更新

我正在使用Elasticsearch批量索引来更新文档的某些统计信息,但可能会发生我尝试更新的文档不存在 - 在这种情况下我希望它什么都不做.

在这种情况下,我不希望它创建文档.

我没有在文档中找到任何内容,或者可能错过了它.

我当前的操作(在这种情况下,它创建文档):

{
    update: {
        _index: "index1",
        _type: "interaction",
        _id: item.id
    }
},
{
    script: {
        file: "update-stats",
        lang: "groovy",
        params: {
            newCommentsCount: newRetweetCount,
        }
    },
    upsert: normalizedItem
}
Run Code Online (Sandbox Code Playgroud)

如何仅在文档存在时更新文档,否则什么都没有?

谢谢

elasticsearch

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

AngularJS查找谁更改了$ watch监视的对象

我正在使用Angular-Bootstrap Carousel指令,并在其上进行一些更改。轮播有ng-repeat幻灯片。

我试图通过将左右控件悬停而不是单击来转到下一张/上一张幻灯片。并通过更改object.active状态来实现(以前为false-新为true)

无论如何,几轮之后,我所有的物体都active=false摆好了,转盘什么也没显示。在调试数组并$watch在每个对象上发现错误后,是因为该指令以某种方式更改了active=false我不希望的时间。

长话短说:我能以某种方式获取我正在使用的范围内的对象的调用堆栈$watch吗?

例如,我的监视代码如下:

$scope.$watch('requestFilters[0]', function(obj) {
    console.log('Item 0 changed');
}, true);
Run Code Online (Sandbox Code Playgroud)

callstack hover carousel angular-bootstrap angularjs-watch

5
推荐指数
0
解决办法
638
查看次数

Javascript:使用 setTimeout 重试的函数

我有一个功能downloadItem可能会因网络原因而失败,我希望能够在实际拒绝该项目之前重试几次。重试需要超时,因为如果出现网络问题,则立即重试是没有意义的。

这是我到目前为止所拥有的:

function downloadItemWithRetryAndTimeout(url, retry, failedReason) {
    return new Promise(function(resolve, reject) {
        try {
            if (retry < 0 && failedReason != null) reject(failedReason);

            downloadItem(url);
            resolve();
        } catch (e) {
            setTimeout(function() {
                downloadItemWithRetryAndTimeout(url, retry - 1, e);
            }, 1000);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

显然,这会失败,因为我第二次(以及第二次)打电话时,downloadItemWithRetryAndTimeout我没有按要求返回承诺。

我如何让它与第二个承诺一起正常工作?

PS,如果代码在 NodeJS 中运行很重要。

javascript settimeout node.js promise

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