CNode

回调内容怎么传给调用的方法里处理?

问答
Ttomoya92发布于10 年前最后回复10 年前4 回复4590 浏览0 收藏

想不出怎么描述了,有点绕 下面是我碰到的问题: 七牛nodejs版的demo:

exports.uploadFile = function(key, localFile) {
  uptoken = uptoken(bucket, key);
  var extra = new qiniu.io.PutExtra();
  qiniu.io.putFile(uptoken, key, localFile, extra, function(err, ret) {
    if(!err) {
      // 上传成功, 处理返回值
      console.log(ret.hash, ret.key, ret.persistentId);
    } else {
      // 上传失败, 处理返回代码
      console.log(err);
    }
  });
};

调用:

var qiniu = require("./utils/qiniuupload");
qiniu.uploadFile("aaaa.jpg", "/Users/xxxx/Pictures/404.jpg");

我想把uploadFile方法里调用putFile方法里的回调内容放在调用里处理,就是下面这种情况 改过之后的uploadFile()方法

exports.uploadFile = function(key, localFile, cb) {
  uptoken = uptoken(bucket, key);
  var extra = new qiniu.io.PutExtra();
  qiniu.io.putFile(uptoken, key, localFile, extra, function (err, ret) {
    cb(err, ret);
  });
};

调用

qiniuupload.uploadFile(Date.now() + "." + uploadFile.type.split("/")[1], filePath, function (err, ret) {
      if(err) {
        console.log(err);
      } else {
        console.log(ret.hash, ret.key, ret.persistentId);
        res.render("index", {
          avatar: "http://xxxx.qiniucdn.com/" + ret.key
        });
      }
    });

启动服务的时候报错

TypeError: cb is not a function

求解

查看回复

回复 (4)

G
gendemos#1·10 年前

异步调用,cb已经被释放了

G
gendemos#2·10 年前

这样改试试: exports.uploadFile = function(key, localFile, cb) { uptoken = uptoken(bucket, key); var extra = new qiniu.io.PutExtra(); qiniu.io.putFile( uptoken, key, localFile, extra, (function(cb){ return function (err, ret) { cb(err, ret); } })(cb) ); };

G
gendemos#3·10 年前

exports.uploadFile = function(key, localFile, cb) { uptoken = uptoken(bucket, key); var extra = new qiniu.io.PutExtra(); qiniu.io.putFile( uptoken, key, localFile, extra, (function(cb){ return function (err, ret) {cb(err, ret);} })(cb) ); };

T
tomoya92#4·10 年前

@gendemos 不行,还是报错

TypeError: cb is not a function
参与回复
登录后即可参与回复。登录