gpt4 book ai didi

javascript - node.js 回调值问题

转载 作者:搜寻专家 更新时间:2023-10-31 23:35:17 26 4
gpt4 key购买 nike

我的问题是下载具有未知扩展名的图像(它可能是“png”或“jpg”或“bmp”等)。我在函数 chekHead 的返回值方面遇到了一些问题:

var fs = require('fs'),
request = require('request');
var processImg = function (uri,filename){
if(checkHead(uri + 'png') > 2000){
download(uri + 'png', filename + '.png', function(){
console.log(uri + 'png' + " - downloaded")
})
}else if(checkHead(uri + 'jpg') > 2000){
download(uri + 'jpg', filename + '.jpg', function(){
console.log(uri + 'jpg' + " - downloaded")
})
}else if(checkHead(uri + 'bmp') > 2000) {
download(uri + 'bmp', filename + '.bmp', function () {
console.log(uri + 'bmp' + " - downloaded")
})
}

}


var checkHead = function(uri){
var length;
request.head(uri, function(err, res, body){
if(err) return console.log("Error");

length = res.headers['content-length'];
console.log(length);
});
return length;
}


var download = function(uri, filename, callback){
request(uri).pipe(fs.createWriteStream('./static/' + filename).on('close', callback));
};

所以在 checkHead 函数中 return length; 总是返回 'underfined',但 console.log 返回有效数字;为什么?

最佳答案

NodeJS 使用回调以异步方式执行您的代码。您的返回可能发生在回调完成之前(在这种情况下可能总是如此)。变量 lengthreturn 处未定义,因为它没有收到任何值。

您可以使用 promises 来链接函数,或者以其他方式构建代码。

对于 promise ,请参见例如: async q

var checkHead = function(uri){
var length;

// Callback is probably invoked after the return
request.head(uri, function(err, res, body){
if(err) return console.log("Error");

length = res.headers['content-length'];
console.log(length);
});

// gets executed directly
return length;
}

关于javascript - node.js 回调值问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31092601/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com