Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.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 Async/await不使用AWS S3 Node.js SDK_Javascript_Node.js_Amazon Web Services_Amazon S3_Aws Sdk - Fatal编程技术网

Javascript Async/await不使用AWS S3 Node.js SDK

Javascript Async/await不使用AWS S3 Node.js SDK,javascript,node.js,amazon-web-services,amazon-s3,aws-sdk,Javascript,Node.js,Amazon Web Services,Amazon S3,Aws Sdk,我已经创建了一个非常简短/简单的示例,说明我在使用aws sdk包for Node.js的脚本中遇到的承诺问题 简而言之,脚本没有在等待关键字处等待。它在循环中循环,无需等待异步函数在继续之前成功完成 代码示例: main.js 单击某个按钮并触发testS3方法 testActions.js 调试器的输出: 我希望消息是交错的,如果您遵循逻辑流程,这是有意义的 它应该在准备设计1中,然后显示结果…,然后再进行2次 prepare design 1中的输出在bat上显示了三次,表明循环在继续之前

我已经创建了一个非常简短/简单的示例,说明我在使用aws sdk包for Node.js的脚本中遇到的承诺问题

简而言之,脚本没有在等待关键字处等待。它在循环中循环,无需等待异步函数在继续之前成功完成

代码示例:

main.js

单击某个按钮并触发testS3方法

testActions.js

调试器的输出:

我希望消息是交错的,如果您遵循逻辑流程,这是有意义的

它应该在准备设计1中,然后显示结果…,然后再进行2次

prepare design 1中的输出在bat上显示了三次,表明循环在继续之前没有等待函数


我是否以某种方式设置了async/Wait错误?我尝试了多个不同的迭代,但似乎无法按预期的方式工作。

显示的行为是正确的,因为forEach的处理程序也是一个异步函数:

  async (x) => {
    const result = await testFunction()
  }
因此forEach循环将立即运行3个异步函数。这些函数中的每一个都将异步等待承诺链的其余部分

如果要同步执行,请使用普通for循环:

for(var i=0; i<3; i++){
  const result = await testFunction()
}

显示的行为是正确的,因为forEach的处理程序也是一个异步函数:

  async (x) => {
    const result = await testFunction()
  }
因此forEach循环将立即运行3个异步函数。这些函数中的每一个都将异步等待承诺链的其余部分

如果要同步执行,请使用普通for循环:

for(var i=0; i<3; i++){
  const result = await testFunction()
}

这是对AVAVT答案的补充,因为我无法对其进行评论,您也可以这样做,这样您就不必手动输入迭代次数并打算使用迭代值

import { s3 } from '@/main.js'

export async function testS3 () {
  const testParams = {
    Bucket: AWS_BUCKET,
    Key: `test_file.txt`,
    Body: 'Testing stuff'
  }

  async function testFunction(layer) {
    console.log('in prepare design 1')
    const result = await s3.putObject(testParams).promise()
    console.log(`the results: ${result}`)
  }

  for (const iterator of [1,2,3]) {
      const result = await testFunction();
  }

}


这是对AVAVT答案的补充,因为我无法对其进行评论,您也可以这样做,这样您就不必手动输入迭代次数并打算使用迭代值

import { s3 } from '@/main.js'

export async function testS3 () {
  const testParams = {
    Bucket: AWS_BUCKET,
    Key: `test_file.txt`,
    Body: 'Testing stuff'
  }

  async function testFunction(layer) {
    console.log('in prepare design 1')
    const result = await s3.putObject(testParams).promise()
    console.log(`the results: ${result}`)
  }

  for (const iterator of [1,2,3]) {
      const result = await testFunction();
  }

}