小编Mal*_*lio的帖子

使用WeakMaps在Javascript中创建常规弱引用

我试图用WeakMaps 做明显的事情:我想创建一个弱引用.特别是,我想要一个没有该列表影响监听器生命的事件监听器列表.

所以我很高兴能找到WeakMaps,直到我看到它们只是为了满足一个(相当罕见的)用例,扩展其他密封的对象.当我想要这样做时,我想不到,但我一直都需要听众列表.

这有可能以一些我没有想到的聪明方式使用WeakMaps吗?

javascript weak-references ecmascript-harmony weakmap ecmascript-6

16
推荐指数
1
解决办法
1122
查看次数

解释无法解释的僵局

首先,我没有看到我如何得到任何死锁,因为我没有使用显式锁定,只涉及一个表,每个插入,选择和更新行都有一个单独的进程,只有一行一次插入或更新,每个进程很少(可能每分钟一次)运行.

这是一个电子邮件队列:

CREATE TABLE `emails_queue` (
  `id` varchar(40) NOT NULL,
  `email_address` varchar(128) DEFAULT NULL,
  `body` text,
  `status_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `status` enum('pending','inprocess','sent','discarded','failed') DEFAULT NULL,
  KEY `status` (`status`),
  KEY `status_time` (`status`,`status_time`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
Run Code Online (Sandbox Code Playgroud)

生成过程响应一些用户操作但大约每90秒执行一次插入表,将状态设置为"挂起".

有一个监控过程,每分钟检查"待处理"和"失败"电子邮件的数量是否过多.它运行不到一秒钟,从未给我任何麻烦.

每分钟,发送过程都会抓取所有待处理的电子邮件.它一次循环播放一封电子邮件,将其状态设置为"inprocess",尝试发送,最后将其状态设置为"已发送","丢弃"(它有理由决定不发送电子邮件) ),或"失败"(由SMTP系统拒绝).

设置状态的声明很不寻常.

UPDATE emails_queue SET status=?, status_time=NOW() WHERE id=? AND status = ?
Run Code Online (Sandbox Code Playgroud)

也就是说,我只更新状态,如果当前状态已经是我认为的那样.在此机制之前,我意外地启动了两个发送过程,他们每个都会尝试发送相同的电子邮件.现在,如果发生这种情况,一个进程将成功地从"待定"到"进程内"移动电子邮件,但第二个将更新零行,实现有一个问题,跳过电子邮件.

问题是,大约一次在100,更新完全失败!我明白了com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction

WTH?

这是唯一一个只发生这种情况的表和查询,它只发生在生产中(最大限度地调查它的难度).

只有两件看起来不寻常的事情是(1)更新参与WHERE子句的列,以及(2)status_time的(未使用的)自动更新.

我正在寻找任何建议或诊断技术.

mysql

13
推荐指数
1
解决办法
6783
查看次数

什么取代"与"?

我知道with这应该是一个"坏部分",但我从不关心,因为我只是小心翼翼地使用它(同上,顺便说一下,用var块中的语句).现在,我明白with已经放弃了EcmaScript 5.0严格模式.

这是我的用例:我有一个可以导出20或30个函数的库.我的大多数代码从不使用任何库,但是使用它们的部分,使用它们很多.

现在,我的代码看起来像:

with (mylib) {
    f1(f2(f1(), f3())); // five or 10 more lines like this
}
Run Code Online (Sandbox Code Playgroud)

为了顺从,我将不得不......

a)将所有功能移动到全局范围(yuck).

b)mylib.f1(mylib.f2(mylib.f1(), mylib.f3()));(这是冗长的)

c)var x = mylib; x.f1(x.f2(x.f1(), x.f3()));(略微冗长但意义不大).

请告诉我现在有更好的解决方案.我想要的是将对象的内容导出到范围级别(这正是with为了什么)的某种方式.

编辑:

我应该做的事情更清楚.我不希望别人向我解释为什么我不想做我想做的事情; 我希望别人向我解释如何做我事实上想要做的事情.

问题是,由于我无法控制的原因,图书馆的出口都有非常明显的名称.不要将它们称为f1,f2等,而是将它们称为Bobs_Library_Function_F1,Bobs_Library_Function_F2,依此类推.

我只是不想要很多看起来像的代码

Bobs_Library.Bobs_Library_Function_F1(Bobs_Library.Bobs_Library_Function_F2(Bobs_Library.Bobs_Library_Function_F1(), Bobs_Library.Bobs_Library_Function_F3()));
Run Code Online (Sandbox Code Playgroud)

(实名并不是那么糟糕,实际上它们非常漂亮,并且前缀削减了.)

任何在这里严重不同意的人,嗯,我希望你永远不会$.whatever在你应该使用的时候使用,jQuery.whatever因为那样会让你看起来像个大炼金龙.

我正在考虑使用$$.f1......

进一步编辑

说真的,感谢所有的投入,但我不是在寻找关于(a),(b)或(c)是否最好的民意调查.我正在寻找能做到这with一点的选择(d).

我是否至少从严格模式中获取块范围?

javascript

12
推荐指数
1
解决办法
253
查看次数

Node.js作为应用程序容器

Apache和Node.js有一些共同之处.我使用Node.js越多,我就越喜欢Node.js; 同样,我使用Apache越多,我越喜欢Node.js.

虽然Apache有一个好处,它可以通过同一个端口做很多事情.PHP,Python,Perl,不同的应用程序,不同的路径,整个magilla.Node.js不这样做,它不应该,但我想做类似的事情.

我想给它一个URL前缀(或理想的regexp)列表和足够的信息,如果它收到一个匹配特定前缀的请求,它会将请求传递给运行指定脚本的从属实例(它将启动这样的实例,如果它还没有,并在这样做时关闭它似乎是谨慎的).基本上,我想nodejs-proxycluster合作.有了它,我可以通过端口80在同一台机器上一起运行多个应用程序.

这看起来非常简单而且非常有用,当我遇到这种情况时,我只想自己写一下,"这看起来非常简单且非常有用 - 可能有人已经写过了!" 有什么建议?

node.js

12
推荐指数
1
解决办法
3199
查看次数

我可以将标题传递给图像源吗?

我的图像源是安全的,所以理想情况下我想做以下事情:

<Image source={{uri: "http://path/to/image", 
                headers: {Authorization: 'Bearer ' + this.props.bearerToken}}}/> 
Run Code Online (Sandbox Code Playgroud)

无论如何我可以近似,没有将图像加载到Javascript并从那里渲染图像?

react-native

12
推荐指数
2
解决办法
6026
查看次数

monMap是flatMap的集合吗?

Scala具有Iterable[A]定义的特征

def flatMap[B](f: (A) ? GenTraversableOnce[B]): Iterable[B] 
Run Code Online (Sandbox Code Playgroud)

这肯定看起来像monad上的绑定函数,并且文档暗示它是monad,但有两个异议,一个是minor和一个major:

  • 次要的:传入的函数的返回类型是这个GenTraversableOnce.我认为这只是一种在评判monad时可以忽略的便利.
  • 主要的一个:monad的"值"是它包含的所有值的列表,但函数一次给出一个值.

这些问题会破坏收藏品的单一性吗?

monads scala

11
推荐指数
2
解决办法
4933
查看次数

如何为多个内容实验选择变体?

我正在使用Javascript API进行Google Analytics内容实验,看起来您有两种选择:

  1. 一次运行一个实验并让Google分配您可以使用的变体chooseVariation(),或者
  2. 一次运行几个实验并使用自己分配变体 setChosenVariation()

(1)让Google控制分配给每个变体的用户数量,这是我需要的,但我有几个实验.这似乎很基本.我错过了什么?

google-analytics content-experiments

10
推荐指数
1
解决办法
5431
查看次数

Elm中的Elm编译器?

几乎每种编译语言都有一个用该语言编写的编译器版本.

有没有用Elm编写的Elm编译器?

elm

10
推荐指数
2
解决办法
1649
查看次数

如何制作主分支轨道?

我克隆了一个存储库,并在master分支中工作.有一个一致的问题:(git pushgit push)没有工作,并给出了长期,无法解释的错误信息.通过反复试验,我发现git push origin master推送正确.但现在我注意到一些奇怪的事情:

$ git config push.default tracking
$ git push
fatal: The current branch master is not tracking anything.
Run Code Online (Sandbox Code Playgroud)

WTF?我想如果你克隆了一个存储库,那么就会自动跟踪主服务器.无论如何,我真正的问题是

  1. 我该如何创建克隆以便跟踪分支?
  2. 没有跟踪的后果(除了当前)有什么影响?
  3. 如何修复当前情况,以便我的分支跟踪遥控器?

编辑 我的本地存储库在其他方面表现得很奇怪; 最值得注意的是:我无法创建远程分支.我把它放在一边,做了一个新的克隆,它以新鲜的方式表现得很奇怪.

首先master是跟踪(是的).其次,我能够建立一个远程分支,但这很奇怪.

Ratatouille $ git push origin origin:refs/heads/premium
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:gamecrush/Ratatouille.git
 * [new branch]      origin/HEAD -> premium
Ratatouille $ git branch -r
  origin/HEAD -> origin/master
  origin/master
  origin/premium
Run Code Online (Sandbox Code Playgroud)

当然,料理鼠王是远程回购的名称.奇怪的一点:那是->为了什么?它似乎是新的,并没有显示旧的本地回购或遥控器的其他克隆.

但现在分支和跟踪工作正如所宣传的那样.

git

9
推荐指数
3
解决办法
1万
查看次数

如何在没有路线的情况下使用AngularAMD

我有一个AngularAMD应用程序,我有一个指令(在RequireJS意义上)依赖于该应用程序(它是该指令"生活"的Angular模块).

如果我使用路由,并在路由视图中使用该指令,那么有一个包含controllerUrl的路由,它取决于包含该指令的文件.

如果我不这样做,那么......

嗯,这是令人沮丧的循环.如果我告诉应用程序它依赖于指令,我会得到循环依赖.如果我不这样做,Angular不知道该指令,并且标签被忽略.

没有从AngularAMD再现整个控制器解析机制,我有没有办法做到这一点?

angular-amd

9
推荐指数
1
解决办法
246
查看次数