请不要讲述我应该如何异步地做所有事情.有时我想以简单明了的方式做事,所以我可以继续其他工作.
由于某种原因,以下代码不起作用.它匹配我在最近的SO问题上找到的代码.节点改变或破坏了什么?
var fs = require('fs');
var rs = fs.createReadStream('myfilename'); // for example
// but I might also want to read from
// stdio, an HTTP request, etc...
var buffer = rs.read(); // simple for SCCCE example, normally you'd repeat in a loop...
console.log(buffer.toString());
Run Code Online (Sandbox Code Playgroud)
读取后,缓冲区为空.
我看到调试器中的rs
events
has end and open functions, nothing else
_readableState
buffer = Array[0]
emittedReadable = false
flowing = false <<< this appears to be correct
lots of other false/nulls/undefined
fd = null <<< …Run Code Online (Sandbox Code Playgroud) 我开发了一个node.js npm模块,在Windows下开发.今天我写了一些Mocha测试.经过多次挣扎,似乎npm test为了工作,package.json不得不看起来像这样:(可能有其他选择???)
"scripts": { "test": "node node_modules/mocha/bin/mocha" }
Run Code Online (Sandbox Code Playgroud)
而不是所有基于Unix的书中的内容,
"scripts": { "test": "./node_modules/.bin/mocha" }
Run Code Online (Sandbox Code Playgroud)
如何将package.json设置为在Windows和Unix上运行?我假设Travis-CI运行Unix,所以,如果我将构建链接到那个,它将会破坏Windows版本.
我找到了一个两年前的帖子,有人要求提供一个功能.那个线程似乎消失了.这个问题似乎很接近,但这并不是我想要的,坦率地说,我无法理解答案.:-(任何人都可以澄清一下吗?
暂时,我要去
"scripts": {
"test": "node node_modules/mocha/bin/mocha",
"testOnUnixUseThis" : "./node_modules/.bin/mocha (I think)",
"testOnWindowsUseThis" : "node node_modules/mocha/bin/mocha"
},
Run Code Online (Sandbox Code Playgroud)
不幸的是,你不能去npm test testOnWindowsUseThis或npm testOnWindowsUseThis.它并没有解决Travis-CI问题.但至少下载该模块的人可以(希望)看到发生了什么.
有更好的想法吗?我是唯一仍在Windows下开发的人吗??? :-)
让我说我正在谈论HTTP到Web服务器,我会接受HTML或文本,但更喜欢HTML.换句话说,标题应该说(我想!)
接受:text/html,text/*
我正在使用Java,所以我有一个URLConnection.我应该使用:
myUrlConnction.setRequestProperty("Accept", "text/html");
myUrlConnction.addRequestProperty("Accept", "text/*");
Run Code Online (Sandbox Code Playgroud)
要么
myUrlConnction.setRequestProperty("Accept", "text/html, text/*");
Run Code Online (Sandbox Code Playgroud)
或者他们是等同的???
一般来说,我看到的大多数第三方代码似乎并不担心这些标题的排序或多个值,所以我想知道它是如何最终起作用的.
在Java中,我已经习惯了Futures.现在我正在研究Android,并且AsyncTask实现了几乎所有相同的方法并涵盖了类似的生命周期.但是,如果我想要保持一致并在我的代码中使用Future,我必须将AsyncTask包装在一个愚蠢的包装器中,因为它实际上并没有实现Future.
他们需要添加的是一种isDone()方法,看起来很简单,然后添加implements Future<Result>.(稍后补充:请参阅下面的答案,了解它会有多么微不足道).
任何Android专家都知道一些很好的理由/模糊的错误可能会导致为什么没有这样做?
我有一个较小的(~100)小数据文件(每个可能有10个字段)插入到MongoDB中.但是它们中的许多(可能全部,但通常是80%左右)已经存在于DB中.这些文件代表了未来几个月即将发生的事件,我每隔几天就会更新一次数据库.因此大多数事件已经在那里.
任何人都知道(或想猜)是否更有效:
db.collection.insert(myArray, {continueOnError: true}, callback)
单独插入,首先检查_ID是否存在?
首先做一个大的删除(类似db.collection.delete({_id: $in : [array of all the IDs in my new documents] }),然后批量插入?
我可能会做#1,因为那是最简单的,我不认为100个文件都那么大所以它可能无关紧要,但如果有10,000个文件?我正在使用node.js驱动程序在JavaScript中执行此操作.我的背景是在Java中,异常是耗时的,这是我要问的主要原因 - "continueOnError"选项是否耗时?
补充:我不认为"upsert"是有道理的.这是为了更新单个文档.就我而言,代表即将发生的事件的单个文档没有改变.(好吧,也许是,这是另一个问题)
发生的事情是会添加一些新文件.
对我来说,新年的决心是学习HTML5 Canvas和Android Canvas API.(我做了很多Swing科学图形的东西,需要分支出来)它们在概念和执行方面有多相似?它们是否足够相似,同时尝试同时学习它们是否有意义?或者它们真的不同,我应该一次关注一个以避免混淆?
我正在尝试使用Jackson 2.0 mixins序列化一个没有注释的类.
简化的源代码如下.请注意,我没有使用getter/setter,但似乎我仍然可以根据一些相当粗略的文档使用mixins .
public class NoAnnotation {
private Date created;
private String name;
private int id;
private List<URL> urls = new ArrayList();
// make one with some data in it for the test
static NoAnnotation make() {
NoAnnotation na= new NoAnnotation();
na.created = new Date();
na.name = "FooBear";
na.id = 23456;
try {
na.urls.add(new URL("http://www.eclipse.org/eclipselink/moxy.php"));
na.urls.add(new URL("http://jaxb.java.net"));
} catch (MalformedURLException e) {
throw new RuntimeException(e);
}
return na;
}
// my Mixin "Class"
static class JacksonMixIn …Run Code Online (Sandbox Code Playgroud) 我正在玩一些像编程一样的功能.并且遇到了一些非常深层嵌套的泛型问题.这是我的SCCE失败,涉及一个抽象类:
public abstract class FooGen<IN, OUT> {
OUT fn2(IN in1, IN in2) { // clever? try at a lazy way, just call the varargs version
return fnN(in1, in2);
}
abstract OUT fnN(IN...ins); // subclasses implement this
public static void main(String[] args) {
FooGen<Number, Number> foogen = new FooGen<Number, Number>() {
@Override Number fnN(Number... numbers) {
return numbers[0];
}
};
System.out.println(foogen.fn2(1.2, 3.4));
}
}
Run Code Online (Sandbox Code Playgroud)
这死了
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Number;
Run Code Online (Sandbox Code Playgroud)
但是,对于非抽象的 FooGen,它工作正常:
public class FooGen<IN, OUT> {
OUT …Run Code Online (Sandbox Code Playgroud) 我看到很多这样的示例代码:(此 Mozilla Doc的稍微缩短版本)
this.addEventListener('install', function(event) {
event.waitUntil(
caches.open('v1').then(function(cache) {
return cache.addAll([
'/sw-test/',
'/sw-test/index.html',
'/sw-test/style.css',
'/sw-test/gallery/',
'/sw-test/gallery/bountyHunters.jpg',
]);
})
);
});
Run Code Online (Sandbox Code Playgroud)
我不明白为什么你要同时添加/sw-test/ 和 /sw-test/index.html。似乎第一个文件夹 URL 应该自动加载下面的所有内容,或者,如果没有这样做,为什么它在那里?对于/sw-test/gallery/和 也是如此/sw-test/gallery/bountyHunters.jpg。
文档说“Cache 接口的 addAll() 方法采用 URL 数组,检索它们,并将生成的响应对象添加到给定的缓存中”。这不是很有帮助。
我真正想做的是缓存几个文件夹中的所有 *.html 文件以及另一个文件夹中的所有图像文件(各种格式)。将它们一一列出是脆弱的(很快就会变得不同步),容易出现拼写错误,而且简直是愚蠢的。
稍后添加
进一步阅读后,似乎不存在通配符,这太愚蠢了。:-) 但是添加文件夹有什么意义呢/sw-test/?
也许我真的错过了什么.
我已经在Lucene索引了一堆键/值对(v4.1,如果重要的话).假设我有key1 = value1和key2 = value2,例如从属性文件中读取.
它们被索引为特定字段并被编入一个笼统的"ALL"字段,例如
new Field("key1", "value1", aFieldTypeMimickingKeywords);
new Field("key2", "value2", aFieldTypeMimickingKeywords);
new Field("ALL", "key1=value1", aFieldTypeMimickingKeywords);
new Field("ALL", "key2=value2", aFieldTypeMimickingKeywords);
// then get added to the Document of course...
Run Code Online (Sandbox Code Playgroud)
然后,我可以使用通配符搜索
new WildcardQuery(new Term("ALL", "*alue1"));
Run Code Online (Sandbox Code Playgroud)
它会找到命中.
但是,获得更多信息会更好,例如"什么是完整的价值(例如"key1 = value1")与该命中一起?".
最好的我可以找到它来获取Document,然后获取IndexableFields的列表,然后循环遍历所有这些并查看field.stringValue().contains("alue1").(我可以查看调试器中的数据结构,所有信息都在那里)
这似乎完全是疯了导致Lucene刚刚做了什么?命中信息不应该返回一些字段吗?
Lucene是否错过了看似"明显"的功能?谷歌和从API开始并没有透露任何直截了当的东西,但我觉得我必须在搜索错误的东西.
java ×5
node.js ×3
android ×2
javascript ×2
annotations ×1
bulkinsert ×1
caching ×1
future ×1
generics ×1
html5 ×1
html5-canvas ×1
http ×1
http-headers ×1
jackson ×1
lucene ×1
mongodb ×1
npm ×1
unix ×1
windows ×1