杂耍异步 - learnyounode - 代码通过然后失败

时间:2016-06-14 10:16:52

标签: javascript node.js asynchronous

  • 节点版本:v4.4.3
  • npm version:3.8.9

错误输出

```  您的提交结果与预期相比: ────────────────────────────────────────────────── ────────────── 1.实际:"未定义" 1.预期:"养一只狗,像吸气一样抽烟。她是正确的bushranger heaps shazza给了我们一些道德。这将是一个公平的dinkum flamin他有一个巨大的摇滚。 "

  1. ACTUAL:" undefined"
  2. 预期:" Mad as a bonza bloody像garbo一样突出。她是对的,因为他有一个大病人。让我们得到一些香蕉弯曲,来一个brekkie。 "

  3. ACTUAL:"当像一个双锅尖叫者一样交叉时,像一个tucker-bag。作为灌木牡蛎的十字架也疯狂地作为mozzie。 "

  4. 预期:"当像一个双锅尖叫者一样交叉时,像一个tucker-bag。作为灌木牡蛎的十字架也疯狂地作为mozzie。 "

  5. ACTUAL:" undefined"

  6. 预期:""

  7. ACTUAL:"当像一个双锅尖叫者一样交叉时,像一个tucker-bag。作为灌木牡蛎的十字架也疯狂地作为mozzie。 "

  8. 预期:

  9. 实际:"让一只狗起来抽烟,然后像一个鼓起来一样交叉。她是正确的bushranger heaps shazza给了我们一些道德。这将是一个公平的dinkum flamin他有一个巨大的摇滚。 "

  10. 预期:

  11. ACTUAL:" Mad as a bonza bloody就像garbo一样突出。她是对的,因为他有一个大病人。让我们得到一些香蕉弯曲,来一个brekkie。 "

  12. 预期:

  13. ACTUAL:"当像一个双锅尖叫者一样交叉时,像一个tucker-bag。作为灌木牡蛎的十字架也疯狂地作为mozzie。 "

  14. 预期:

  15. ACTUAL:""

  16. 预期:
  17. ```

    我的代码

    ```

    var http= require ('http');
    var final=[];
    
    
    function cases(index){
    var result='';
    
    http.get(process.argv[2+index],function(chunky){
        chunky.setEncoding('utf8')
        chunky.on('data',function(data){
    
            result+=data;
        });
        chunky.on('error',function(error){
            console.log(error);
        });
        chunky.on('end',function(){
            //console.log("this is the result: ",result);
    
            final[index]=result;
            //console.log("final length is : ",final.length);
           if(final.length===3){
               printResult();
           }
    
        });
    });
    }
    
    for(var i=0;i<3;i++){
    cases(i);
    }
    
    function printResult(){
    for (var j=0;j<final.length;j++){
    console.log(final[j]);
    }
    
    }
    

    ``` 这个代码实际上已经通过,我可以继续下一个练习,但我觉得我应该再试一次,看看会发生什么。 然后我得到了一条:上面粘贴的失败信息。

    那么,我究竟做错了什么? 这是怎么通过然后......现在怎么会失败?

    编辑:我读了另一个相关的帖子,说如果我们先得到第3个响应,那么最终[2] =无论什么响应,数组的长度都是3,即使其他2个响应不存在。 这是有道理的,所以我尝试首先使用var count = 0,然后为每个响应计算++,但即使这样,代码也没有按预期工作。

    不知道为什么!!

    编辑:解决问题--- 我现在解决了。当我将它添加到响应时,我正在使用count ++。

    ,相反,当我将它添加到最终数组时,我增加了计数。

    这是现在有效的最终代码

    var http= require ('http');
    var final=[];
    var count=0;
    
    
    function cases(index){
    var result='';
    
    http.get(process.argv[2+index],function(chunky){
        chunky.setEncoding('utf8')
        chunky.on('data',function(data){
    
            result+=data;
    
        });
        chunky.on('error',function(error){
            console.log(error);
        });
        chunky.on('end',function(){
            //console.log("this is the result: ",result);
            count++;
            final[index]=result;
            //console.log("final length is : ",final.length);
           if(count===3){
               printResult();
           }
    
        });
    });
    }
    
    for(var i=0;i<3;i++){
    cases(i);
    }
    
    function printResult(){
    for (var j=0;j<3;j++){
    console.log(final[j]);
    }
    
    }
    

1 个答案:

答案 0 :(得分:0)

问题解决了 - 我现在解决了。当我将它添加到响应时,我正在使用count ++。

,相反,当我将它添加到最终数组时,我增加了计数。

这是现在有效的最终代码

var http= require ('http');
var final=[];
var count=0;


function cases(index){
var result='';

http.get(process.argv[2+index],function(chunky){
chunky.setEncoding('utf8')
chunky.on('data',function(data){

    result+=data;

});
chunky.on('error',function(error){
    console.log(error);
});
chunky.on('end',function(){
    //console.log("this is the result: ",result);
    count++;
    final[index]=result;
    //console.log("final length is : ",final.length);
   if(count===3){
       printResult();
   }

});
});
}

for(var i=0;i<3;i++){
cases(i);
}

function printResult(){
for (var j=0;j<3;j++){
console.log(final[j]);
}

}