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