什么是笨蛋?

问题描述 投票:0回答:2

在下面的代码中,从multer API,destination和filename选项都是匿名函数。这两个函数都有一个名为cb的参数。这些回调函数是在multer模块中定义的,还是我应该提供它们?

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, '/tmp/my-uploads')
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now())
  }
})

var upload = multer({ storage: storage }
javascript node.js express multer
2个回答
1
投票

简答:您提供回调。

cb是一个接受2个参数的回调函数。

您可以在任一方法的使用场景中看到这一点。如...

let req = true;
let file = 'MyFile.txt';
function myCallbackFunc = function(value1, value2){ console.log('my callback function'); };
storage.filename(req, file, myCallbackFunc));

请理解我不知道“req”或“file”参数应该是什么样的,所以我只是为这个例子编写了一些东西。


1
投票

注意:我不知道什么是m ..

假设你有一个功能,

 function destination(req, files){
    //something happen here
 }

现在在您的代码中,您使用两个参数调用此函数

destination(req, files);

现在如果你需要在完成上述功能后立即执行另一个函数,你需要有一个回调函数。让我们说在完成目标函数后你需要console.log('Hello world')

destination(req, files , function(){
    console.log('hello world')
});

我相信你知道这种功能。现在问题是目标函数只接受2个参数,所以我们需要在函数定义中添加另一个参数。让我们将第三个参数称为'cb'

 function destination(req, files, cb){
    //something happen here
 }

现在应该是什么类型的cb?它应该是一个功能。不是吗?所以如果第三个参数是一个函数,那么我们必须在某个地方执行这个cb函数。执行cb函数的最佳位置是在目标函数内的所有代码之后。

 function destination(req, files, cb){
    //something happen here
    cb();
 }

在这里我们有一个回调函数!!如果你深入思考,你会理解为什么他们引入了javaScript Promises

© www.soinside.com 2019 - 2024. All rights reserved.