簡體   English   中英

錯誤:未來解決了多次

[英]Error: Future resolved more than once

第一次在瀏覽器上運行我的角度應用程序時,一切正常,但是刷新頁面時出現以下錯誤消息。

/.../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) 

我的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());  

res對象是可讀的流 ,可以分多個塊接收其數據,每個塊都在單獨的'data'事件中提供

您還需要監聽'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);
        });
    } // ...

您還將要為每次使用getNodeList()創建一個new Future

var Fiber = require('fibers/future');

function getNodeList(method){
    var future = new Future;

    // ...
}

通過在腳本頂部創建它,每個請求將只存在一個Future 並且,一旦將其設置為由第一個請求完成,此后便無法再供其他人使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM