[英]Error: Future resolved more than once
Everything works fine when I run my angular app for the 1st time on the browser.However, I have gotten the below errors messages when I refreshed the page. 第一次在浏览器上运行我的角度应用程序时,一切正常,但是刷新页面时出现以下错误消息。
/.../node_modules/fibers/future.js:248 /.../node_modules/fibers/future.js:248
throw new Error('Future resolved more than once'); ^ Error: Future resolved more than once at Object.Future.return (/.../node_modules/fibers/future.js:248:10) at IncomingMessage.<anonymous> (/.../server.js:38:34) at IncomingMessage.emit (events.js:95:17) at IncomingMessage.<anonymous> (_stream_readable.js:765:14) at IncomingMessage.emit (events.js:92:17) at emitReadable_ (_stream_readable.js:427:10) at emitReadable (_stream_readable.js:423:5) at readableAddChunk (_stream_readable.js:166:9) at IncomingMessage.Readable.push (_stream_readable.js:128:10) at HTTPParser.parserOnBody [as onBody] (http.js:143:22)
I have the following code in my server.js 我的server.js中有以下代码
var Fiber = require('fibers/future');
var future = new Fiber;
function getNodeList(method){
...
...
...
var req = https.request(options, function(res) {
var nodesList;
if (res.statusCode === 200) {
res.on('data', function(d) {
// process.stdout.write(d);
if (Buffer.isBuffer(d)) {
nodesList = JSON.parse(d.toString('utf-8'));
future.return(nodesList); <---Error Happen Here
}
});
} else {
console.log("ERROR");
}
});
}
app.post('/viewNodeList', function(req, res) {
var object = getNodeList("GET");
console.log("this One!");
res.status(200).send(object);
}.future());
The res
object is a readable stream , which can receive its data in multiple chunks, with each provided in a separate 'data'
event . res
对象是可读的流 ,可以分多个块接收其数据,每个块都在单独的'data'
事件中提供 。
You'll want to also listen for the 'end'
event , which will only occur once at most per stream, to know when all of the chunks have been received. 您还需要监听'end'
事件 ,该事件在每个流中最多只会发生一次,以了解何时接收到所有块。
if (res.statusCode === 200) {
let chunks = [];
let totalLength = 0;
res.on('data', function(chunk) {
totalLength += chunk.length;
chunks.push(chunk);
});
res.on('end', function () {
var body = Buffer.concat(chunks, totalLength);
nodeList = JSON.parse(body.toString());
future.return(nodesList);
});
} // ...
You'll also want to create a new Future
for each use of getNodeList()
. 您还将要为每次使用getNodeList()
创建一个new Future
。
var Fiber = require('fibers/future');
function getNodeList(method){
var future = new Future;
// ...
}
By creating it at the top of the script, only one Future
will exist for every request. 通过在脚本顶部创建它,每个请求将只存在一个Future
。 And, once it's set as completed by the first request, it can't be reused for others after that. 并且,一旦将其设置为由第一个请求完成,此后便无法再供其他人使用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.