简体   繁体   English

错误:未来解决了多次

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM