Javascript 尝试在S3.putobject之后调用回调

Javascript 尝试在S3.putobject之后调用回调,javascript,amazon-web-services,amazon-s3,aws-lambda,aws-sdk,Javascript,Amazon Web Services,Amazon S3,Aws Lambda,Aws Sdk,对aws和javascript来说有点陌生,我正在尝试实现以下目标:使用二进制支持上传一张照片,并在我的返回值上添加状态参数,以便稍后在API网关中使用 var params = { Key: key, Body: image, }; this.s3.putObject(params, function(err, data) { if (!err) { callback(null,{newValue: "This is my test value"}); } }); 如

对aws和javascript来说有点陌生,我正在尝试实现以下目标:使用二进制支持上传一张照片,并在我的返回值上添加状态参数,以便稍后在API网关中使用

var params = {
  Key: key,
  Body: image,
};
this.s3.putObject(params, function(err, data) {
  if (!err) {
    callback(null,{newValue: "This is my test value"});
  }
});
如果我注释掉回调行,代码可以正常工作,但在其他情况下会崩溃。
任何关于如何修复它的提示都将不胜感激

调用结构应如上所述

您的代码可以是:

var params = {
  Key: key,
  Body: image,
};
var newValue = ""
this.s3.putObject(params, function(err, data) {
    if (!err) {
        this.newValue = "This is my test value";
    }
});

这里的“函数(err,data){}”表示“回调”

Rajana是正确的。再加上:这是JS(或函数式编程)的核心功能。
putObject
函数接受两个参数:
params
,一个包含参数的对象和
callback
,该函数完成后在
putObject
函数内执行。因此,您不需要调用
回调
putObject
调用
回调

因此,您创建了一个函数,并将其作为
putObject
函数的函数参数。所以这也会起作用:

const params = { some: 'params'};
const fn = function(err) { console.log(err); }
this.s3.putObject(params, fn);

但您也可以在参数中定义函数(使其成为匿名函数),就像您在示例中所做的那样。

是的,但我的问题是,我想将值返回到端点,如何在此回调上传递值,使其成为响应的一部分。您不能这样做,但可以使用JS如何使用作用域。这是有效的:
constx='hi';s3.putObject(params,function(){console.log(x);}
有关详细信息,请参阅。基本上,如果在函数外部定义变量,可以在函数内部使用它。
const params = { some: 'params'};
const fn = function(err) { console.log(err); }
this.s3.putObject(params, fn);