相关疑难解决方法(0)

处理Promise.all中的错误

我有一个Promise数组,我正在使用Promise.all(arrayOfPromises)解析;

我接着继续承诺链.看起来像这样

existingPromiseChain = existingPromiseChain.then(function() {
  var arrayOfPromises = state.routes.map(function(route){
    return route.handler.promiseHandler();
  });
  return Promise.all(arrayOfPromises)
});

existingPromiseChain = existingPromiseChain.then(function(arrayResolved) {
  // do stuff with my array of resolved promises, eventually ending with a res.send();
});
Run Code Online (Sandbox Code Playgroud)

我想添加一个catch语句来处理单个promise,以防它出错.但是当我尝试时,Promise.all返回它找到的第一个错误(忽略其余的),然后我无法从其余的数据中获取数据数组中的promise(没有错误).

我尝试过像......

existingPromiseChain = existingPromiseChain.then(function() {
      var arrayOfPromises = state.routes.map(function(route){
        return route.handler.promiseHandler()
          .then(function(data) {
             return data;
          })
          .catch(function(err) {
             return err
          });
      });
      return Promise.all(arrayOfPromises)
    });

existingPromiseChain = existingPromiseChain.then(function(arrayResolved) {
      // do stuff with my array of resolved promises, eventually ending with a res.send();
}); …
Run Code Online (Sandbox Code Playgroud)

javascript promise es6-promise

210
推荐指数
9
解决办法
14万
查看次数

在 Node.js 中处理大型 CSV 上传

根据这里的先前线程:

节点异步循环 - 如何使此代码按顺序运行?

...我正在寻找有关处理大型数据上传文件的更广泛的建议。

设想:

用户上传了一个非常大的 CSV 文件,其中包含数十万到数百万行。它使用 multer 流式传输到端点:

const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

router.post("/", upload.single("upload"), (req, res) => {
    //...
});
Run Code Online (Sandbox Code Playgroud)

每一行都被转换成一个 JSON 对象。然后将该对象映射到几个较小的对象中,这些对象需要插入到几个不同的表中,分布在各种微服务容器中并由其访问。

async.forEachOfSeries(data, (line, key, callback) => {
    let model = splitData(line);
    //save model.record1, model.record2, etc. sequentially
});
Run Code Online (Sandbox Code Playgroud)

很明显,使用这种方法我会遇到内存限制。这样做的最有效方式是什么?

javascript asynchronous node.js

7
推荐指数
1
解决办法
6264
查看次数

节点异步循环 - 如何使此代码按顺序运行?

我知道有几篇关于这个的帖子,但根据我发现的那些,这应该可以正常工作。

我想在一个循环中发出一个 http 请求,并且我不希望循环在请求回调被触发之前进行迭代。我正在使用异步库,如下所示:

const async = require("async");
const request = require("request");

let data = [
    "Larry",
    "Curly",
    "Moe"
];

async.forEachOf(data, (result, idx, callback) => {
    console.log("Loop iterated", idx);
    let fullUri = "https://jsonplaceholder.typicode.com/posts";
    request({
        url: fullUri
    }, 
    (err, res, body) => {
        console.log("Request callback fired...");
        if (err || res.statusCode !== 200) return callback(err);
        console.log(result);
        callback();
    });
});
Run Code Online (Sandbox Code Playgroud)

我看到的是:

Loop iterated 0
Loop iterated 1
Loop iterated 2
Request callback fired...
Curly
Request callback fired...
Larry
Request callback fired...
Moe
Run Code Online (Sandbox Code Playgroud)

我需要看到的是: …

javascript asynchronous node.js

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

标签 统计

javascript ×3

asynchronous ×2

node.js ×2

es6-promise ×1

promise ×1