小编Dav*_*ave的帖子

了解NSString的initWithBytes

假设"someData"是包含一些字节数据的NSMutableData.

如果我写下面的内容:

NSString *someString = [NSString string];
[someString initWithBytes:[someData mutableBytes] length:[someData length] encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

第二行给我一个"无法识别的选择器发送到实例"错误

但如果我写:

NSString *someString=[[NSString alloc] initWithBytes:[someData mutableBytes] length:[someData length] encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)

然后它工作.前一种方式不起作用是有原因的吗?可以在没有"alloc"的情况下完成(事先创建someString吗?)

谢谢.

objective-c

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

承诺链基本问题

我正在努力了解Promises.我创建了一些有效的承诺链和其他没有的承诺链.我取得了进步,但显然缺乏基本概念.例如,以下承诺链不起作用.这是一个愚蠢的例子,但显示了问题; 我试图在链中使用Node的函数randomBytes两次:

var Promise = require("bluebird");
var randomBytes = Promise.promisify(require("crypto").randomBytes);

randomBytes(32)
.then(function(bytes) {
    if (bytes.toString('base64').charAt(0)=== 'F') {
        return 64;   //if starts with F we want a 64 byte random next time
    } else {
        return 32;
    }
})
.then(randomBytes(input))
.then(function(newbytes) {console.log('newbytes: ' + newbytes.toString('base64'));})
Run Code Online (Sandbox Code Playgroud)

这里出现的错误是" input未定义".我想做一些不能(或不应该)做的事吗?

javascript node.js promise bluebird

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

一枪Streams

以下将无法正常工作:

var http = require('http');
var fs = require('fs');

var theIndex = fs.createReadStream('index.html');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    theIndex.pipe(res);
}).listen(9000);
Run Code Online (Sandbox Code Playgroud)

它将在第一个请求时运行良好,但对于所有后续请求,不会将index.html发送到客户端.createReadStream调用似乎需要在createServer回调中.我想我可以概念化为什么,但你能用言语阐明原因吗?似乎是一旦流完成,文件句柄就会关闭,并且必须再次创建流?它不能简单地"重新启动"?它是否正确?

谢谢

node.js

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

标签 统计

node.js ×2

bluebird ×1

javascript ×1

objective-c ×1

promise ×1