簡體   English   中英

JavaScript,Node.js:給定函數在async.each()回調中未定義

[英]JavaScript, Node.js: given function undefined in async.each() callback

我有一個node.js服務器,根據請求,該服務器向客戶端發送svg(這需要花費較長的時間),並且為了阻止它向客戶端發送不完整的svg,我使用了async.each( ),以構建svg。

調用write函數等。我使用一個回調函數,該函數會傳遞給構建svg的函數,並在async.each()完成后立即調用。

但是,當async.each被調用時,它說我給svg builing函數提供的回調函數不存在。 為什么會這樣,我怎么稱呼它?

 function sendSVG(res){ var str = "somePredefinedStuff"; buildSVG(str,function(){ str += "someEndStuff"; res.write(str); res.end(); }); } function buildSVG(str,callback){ var array = [1,2,3]; async.each(array, function(a){ str += "moreStuff"; buildSVG(str); str += "moreEndStuff"; },function(err){ console.log(typeof callback); //always returns undefined. Should actually return function once? if(callback) callback(); }); } 

編輯:問題原來出在代碼的另一部分(這種情況下從未調用過回調)。 該字符串仍然僅以其原始形式發送,但是應該有一種解決方法。

您沒有在嵌套的buildSVG調用中傳遞回調。 大概您想要的是:

async.each(array, function(a, cb) {
  str += “moreStuff”;
  buildSVG(str, function() {
    str += “moreEndStuff”;
    cb(); // call next async func
  });
}, callback);

我假設您正在使用nodejs異步庫,如果是這種情況,則需要調用next函數以繼續迭代。 看看下面的代碼

function sendSVG(res){

  var data = {str: "somePredefinedStuff"};

  buildSVG(data, function(){
    data.str += "someEndStuff";
    res.write(data.str);
    res.end();
  });

}

function buildSVG(data, callback){

  var array = [1,2,3];

  async.each(array, function(a, next){
    data.str += "moreStuff";
    buildSVG(data, function () {
        data.str += "moreEndStuff";
        setImmediate(next);
    });        
  },function(err){

    console.log(typeof callback); //always returns undefined. Should actually return function once?
    if(callback)
      callback();

  });
}

請記住,由於遞歸,此代碼會導致無限循環,因此您需要添加一個會破壞該遞歸的基本案例。 或更改它,使其根本不使用遞歸。

暫無
暫無

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

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