使用实例方法作为事件处理程序的回调改变的范围this
从"我的实例"到"无论只是调用的回调".所以我的代码看起来像这样
function MyObject() {
this.doSomething = function() {
...
}
var self = this
$('#foobar').bind('click', function(){
self.doSomethng()
// this.doSomething() would not work here
})
}
Run Code Online (Sandbox Code Playgroud)
它有效,但这是最好的方法吗?这对我来说很奇怪.
我必须与远程api进行交互,迫使我链接请求.这是异步模式下的回调 - 地狱:
// pseudocode: ajax(request_object, callback)
ajax(a, function() {
ajax(b(a.somedata), function() {
ajax(c(b.somedata), function() {
c.finish()
}
})
})
Run Code Online (Sandbox Code Playgroud)
它在同步模式下更具可读性:
sjax(a)
sjax(b(a.somedata))
sjax(c(b.somedata))
c.finish()
Run Code Online (Sandbox Code Playgroud)
但是Sjax是邪恶的:)我该怎么做,在一个漂亮的不那么邪恶和可读的方式?
我想允许客户端(包括非常慢的客户端)从JAX-RS(球衣)Web服务下载大文件,但我遇到了麻烦。似乎JAX-RS中的异步功能不支持此功能。
AsyncResponse
如果您必须等待资源在服务器端变为可用,则可以解决该问题,但是仅允许您调用 AsyncResponse.resume(Object)
一次。之后,响应将被正常处理。速度慢或恶意的客户端将阻塞工作线程,直到所有字节传输完毕。这里没有异步IO。ChunkedOutput
在jersey中,将块存储在无限制的内存队列中,并且不提供任何公共接口来检查该队列的大小。它是为缓慢的小块数据流而设计的。足够慢的客户最终会导致失败OutOfMemoryError
。StreamingOutput
根本不是异步的。该StreamingOutput.write(OutputStream)
方法应该阻塞直到写入所有字节。HttpServletRequest.startAsync
在不破坏jerseys内部结构的情况下从JAX-RS请求处理程序内进入servlet级别()的方法。->IllegalStateException
我没有看到明显的解决方案吗?
我必须用cairo渲染一个非常大的图像(>50.000²像素).为了做到这一点而不耗尽内存我一个接一个地渲染图像的部分(<1.000²像素),然后将它们合并在一起.
因为cairos剪切算法比我自己更快,所以第三步绘制整个图像,即使只有一部分是可见的.大多数CPU在步骤3中使用(通过python).大部分内存用于步骤4(通过cairo).
有没有办法加快速度?像这样的东西?
要么
我有主题(id*)和标签(id*,name)和链接表topic_tags(topicFk*,tagFk*).
现在我想选择每个主题,它包含所有好的标签(a,b,c),但没有坏标签(d,e,f).
我怎么做?