相关疑难解决方法(0)

通过Node JS从本地将多个文件同时上传到s3存储桶

我正在尝试将文件上传到s3存储桶,以下代码用于完成此操作。

var params = {
  localFile: "../Processor/1.wav",

  s3Params: {
    Bucket: "bucketname",
    Key: "1.wav",
  },
};
var uploader = client.uploadFile(params);
uploader.on('error', function(err) {
  console.error("unable to upload:", err.stack);
});
uploader.on('progress', function() {
  console.log("progress", uploader.progressMd5Amount,
            uploader.progressAmount, uploader.progressTotal);
});
uploader.on('end', function() {
  console.log("done uploading");
});
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常。现在让我们在这里说,我想从本地路径上载5个文件到s3存储桶,我该如何实现,是否有任何直接方法可以为多个文件上载提供亚马逊,或者我需要使用异步模块?

javascript amazon-s3 amazon-web-services node.js

6
推荐指数
1
解决办法
1292
查看次数

承诺的进展

理论: 我在开始时做了大约100个承诺,然后用它来解决它们Promise.all().

这100个承诺中的每一个依次进行一些异步REST调用,其响应可能主要变化(例如由于网络连接).

解决所有100个承诺的过程大约需要20秒.在此期间,应向用户提供进度的实时反馈,以使他保持参与.

为了实现这些异步操作的进度,我想在客户端使用progressCounter,它的值将在每个promise被解析后立即更新.

事情是,如果progressCounter = 1并且所有这些操作都是异步的,我担心会遇到一种竞争条件,例如,由两个不同的promises检索的progressCounter的当前值可能会被发现为1,因此他们可能会尝试增加progressCounter因为竞争条件,所以最终值不会是3.

实验: 我尝试重现这个理论但不能使用以下内容:

var progress = {};
progress.counter = 1;

var promise1 = new Promise(function(resolve, reject) {
   resolve();
});

var promise2 = new Promise(function(resolve, reject) {
   resolve();
});

promise1.then(function() {
    progress.counter += 1;
});

promise2.then(function() {
    progress.counter += 1;
});

setTimeout(function() {
    alert(progress.counter); // progress.counter: 3
}, 1000);` 
Run Code Online (Sandbox Code Playgroud)

问题: 问题是否可以在上面的理论中描述这样的竞争条件?如果没有,理论有何缺陷?如果是,那么跟踪承诺解决进度的好方法是什么?

javascript asynchronous promise

3
推荐指数
1
解决办法
1548
查看次数

如何中止一批异步获取请求?

我目前有一个坐标列表,我用它来获取附近的徒步旅行。假设我将列表状态更新为新坐标,但先前坐标的提取请求未完成 - 如何取消对先前坐标发出的所有提取请求,而仅根据新坐标调用新的提取请求?

我尝试实现,AbortController但它可能不起作用,因为它没有取消“批量”的获取请求,而只是取消单个获取请求。我的代码如下:

  let abortController = new AbortController();
  const getNearbyHikes = async (coordinates) => {
    abortController.abort();
    abortController = new AbortController();
    for (const coord of coordinates) {
      if (coord) {
        try {
          const { lat, lng } = cord.coordinates
          const response = await fetch(
            'http://localhost:5000/category/' + lat + "/" + lng + '/' + searchCategory,
            {signal: abortController.signal}
          )
          const result = await response.json();
          setHikes((prevState) => [...prevState, ...result.businesses])
        } catch (error) {
          if(error.name === 'AbortError'){
            return;
          }
          throw error …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs fetch-api

2
推荐指数
1
解决办法
1828
查看次数