angularjs - 错误: Future resolved more than once

标签 angularjs node.js express

当我第一次在浏览器上运行我的 Angular 应用程序时,一切正常。但是,当我刷新页面时,我收到了以下错误消息。

/.../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 对象是 readable stream ,它可以接收多个 block 中的数据,每个 block 都在单独的 'data' event 中提供。 .

您还需要收听 'end' event ,每个流最多只会发生一次,以了解何时收到所有 block 。

    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() 创建一个新的 Future

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

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

    // ...
}

通过在脚本顶部创建它,每个请求只会存在一个 Future。而且,一旦第一个请求将其设置为完成,此后就不能再供其他请求重用。

关于angularjs - 错误: Future resolved more than once,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33308521/

相关文章:

javascript - ng-click 无法在 IE 中使用选项选择 angularjs

javascript - AngularJS 中的文件上传重置

javascript - Mongoose:嵌套 Json 的架构并存储它 (Node.js)

javascript - 错误地将 JSON 数据写入文件

sql - SQLite3 在 Node.js 中有准备好的语句吗?

json - 发布字符串会导致 Express 主体解析器抛出 SyntaxError

javascript - Angular UI Bootstrap Accordion - 第一个 Accordion 组未打开

ajax - 带有 CORS 过滤器的跨源请求

node.js - 使用 Sequelizejs 检索多行

Node.js Express - next() 回调