簡體   English   中英

JavaScript回調函數不起作用

[英]Javascript callback function not work

我正在使用nodeJS和expressJS。 我有2個功能,主要功能:

download(imgUrl, imgMD5, function(fileLength, fileSize) {
    console.log(fileLength);

    var qb = data.Img.query();
    qb.where('img_md5', '=', imgMD5).update({
        img_downloaded: 1
    }).then(function() {});
});

和外部功能

module.exports = function() {
    return function(uri, filename) {
        request(uri, function(err, res, callback) {
            fileLength = res.headers['content-length'];
            var mkdirs = function(fold, callback) {

                var pf = path.dirname(fold);

                fs.exists(pf, function(exists) {
                    var create = function() {

                        fs.mkdir(fold, callback);
                    };
                    if (exists) {
                        create();
                    } else
                        mkdirs(pf, create);
                })
            };
            var folder = ('./downloaded/' + yy + '/' + mm + '/' + dd + '/' + ho + '/');

            mkdirs(folder, function() {
                var r = request(uri).pipe(fs.createWriteStream(folder + filename));
                r.on('close');
            });
            callback(fileLength);
        });
    };
};

但是在運行時會引發錯誤:

TypeError:字符串不是函數

我不知道我是否正確使用了回調?

謝謝

您的request()回調參數標記不正確。 傳遞給回調的第三個參數是響應中整個緩沖區(字符串)的主體,而不是函數。 這就是為什么它抱怨callback(fileLength);的原因callback(fileLength);

另外,由於您使用了回調(接收整個緩沖的響應),因此無需再次請求URL。 因此,您可以更改此設置:

mkdirs(folder, function(){
  var r = request(uri).pipe(fs.createWriteStream(folder + filename));
  r.on('close');
});

對此:

mkdirs(folder, function() {
  // `data` here is the third argument to the `request()` callback ...
  fs.writeFile(folder + filename, data);
});

保存額外的HTTP請求。

或者,如果您確實希望流式傳輸響應數據,則可以執行以下操作:

request(uri).on('response', function(res) {
  // ...

  mkdirs(folder, function() {
    res.pipe(fs.createWriteStream(folder + filename));
  });
});

暫無
暫無

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

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