Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法返回url字符串,但可以对其进行console.log。不知道为什么_Javascript_Amazon S3_Aws Lambda - Fatal编程技术网

Javascript 无法返回url字符串,但可以对其进行console.log。不知道为什么

Javascript 无法返回url字符串,但可以对其进行console.log。不知道为什么,javascript,amazon-s3,aws-lambda,Javascript,Amazon S3,Aws Lambda,我正在编写一个lambda函数,其中使用s3.upload在s3中存储一个文件,然后尝试获取一个预先签名的URL s3.getSignedUrl,以便外部用户可以下载我上载的文件 现在,当我使用console.log来记录url时,url会被记录到cloudwatch中,但是当我试图在下一行返回相同的url时,它就不起作用了 s3.getSignedUrl('getObject', { Bucket: '<Bucket-Name>',

我正在编写一个lambda函数,其中使用s3.upload在s3中存储一个文件,然后尝试获取一个预先签名的URL s3.getSignedUrl,以便外部用户可以下载我上载的文件

现在,当我使用console.log来记录url时,url会被记录到cloudwatch中,但是当我试图在下一行返回相同的url时,它就不起作用了

 s3.getSignedUrl('getObject', {
                    Bucket: '<Bucket-Name>',
                    Key: '<Key>',
                    Expires: signedUrlExpireSeconds
                }, function(err, url){
                    if(err) throw err;
                    console.log(url);
                    return { ...response, body: JSON.stringify({message: url}) };            
                })
            });
        });

        return { ...response, body: JSON.stringify({message: 'outsideresult'}) };
这是代码的一部分,console.log行可以记录url,但是url不会返回

执行外部返回语句


不过,url的工作方式与预期相同。如果有人能帮我解决这个问题,请查收。

因为最后一句话,即

返回{…响应,主体:JSON.stringify{message:'outheresult'}

在回调之前执行

`function(err, url){ 
      if(err) throw err;
      console.log(url);
      return { ...response, body: JSON.stringify({message: url}) }; 
     })`

因此,当执行此回调时,它只在控制台上记录语句。因此,在逻辑中进行一些更新

这是因为此代码是异步执行的。当操作成功时,将调用作为回调函数err,url传递的函数。如果在回调函数中返回某些内容,则不会返回原始范围

s3.getSignedUrl方法不返回从回调内部传递的值

如果使用console.logs执行下面的代码,您将看到main函数首先返回,然后回调函数返回,反之亦然 这就是javascript的工作原理

 s3.getSignedUrl('getObject', {
                    Bucket: '<Bucket-Name>',
                    Key: '<Key>',
                    Expires: signedUrlExpireSeconds
                }, function(err, url){
                    if(err) throw err;
                    console.log(url);
                    //This is executed later. Returning something here has no effect
                    console.log("Callback returns")
                    return { ...response, body: JSON.stringify({message: url}) };            
                })
            });
        });
console.log("Main Function returns")
        return { ...response, body: JSON.stringify({message: 'outsideresult'}) };