最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

异步伺机不能与AWS的S3的Node.js SDK工作

运维笔记admin10浏览0评论

异步/伺机不能与AWS的S3的Node.js SDK工作

异步/伺机不能与AWS的S3的Node.js SDK工作

我创建了我与Promises利用aws-sdk包Node.js的具有在脚本的问题在很短/简单的例子

总之,该脚本不是在await关键字等。它通过循环回路,而无需等待async功能在移动之前成功完成。

代码示例:


main.js

const AWS = require('aws-sdk')
import constants from '@/constants'

AWS.config.update({
  accessKeyId: constants.awsAccessKey,
  secretAccessKey: constants.awsSecretAccessKey,
  region: constants.awsRegion
})

export const s3 = new AWS.S3({apiVersion: '2006-03-01'})

点击一些按钮,触发testS3()方法...


testActions.js

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}`)
  }

  [1,2,3].forEach(async (x) => {
    const result = await testFunction()
  })
}

从调试器输出:


我期待的消息交织,这是有道理的,如果你遵循的逻辑流。

它应该是in prepare design 1,然后显示the results...,然后通过和做2次以上。

显示in prepare design 1三次马上蝙蝠输出显示我环路没有继续之前等待功能。


我有没有设置async / await错误以某种方式?我试过多种不同的迭代似乎并不能怎么样,我也期待得到这个工作。

回答如下:

所显示的行为是正确的,因为forEach的处理也是一个async功能:

  async (x) => {
    const result = await testFunction()
  }

所以forEach循环会立即运行3种异步功能。每个这些功能将await的承诺链的其余部分是异步的。

如果你想有一个同步执行,使用普通的for循环:

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

评论列表(0)

  1. 暂无评论