开发者社区 > 云原生 > Serverless > 正文

就这点 就是 100个并发,同时请求 函数B 但他不是同时过去的,,只能一次过去7、8个这样子。麻烦

就这点 就是 100个并发,同时请求 函数B 但他不是同时过去的,,只能一次过去7、8个这样子。麻烦看下

app.post('/batch_self_rate', (req, res) => { try { Orders = req.body; // console.log(Orders); // res.send({ result: Orders }); // return; async.mapLimit(Orders, 100, function (order, callback) { //allrate.post_rate(order, callback, connection); allrate.post_rate(order, callback); }, function (err, result) { if (err) console.log(err); res.send({ result: result }); }); } catch (error) { console.log(error); res.send({ "code": 400, "msg": "试算价格失败"+error.messsage }); } })

展开
收起
云原生那些事 2023-06-25 10:15:03 58 0
4 条回答
写回答
取消 提交回答
  • 看看这个呢 then 以后再 res.send 试试呢 https://stackoverflow.com/a/57678842 思路就是请求没发完 不能res.send

    此答案来自钉钉群“阿里函数计算官网客户"

    2023-06-25 16:36:34
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    根据您提供的代码,您正在使用Node.js编写一个接口,该接口接收一个包含100个订单的请求,并以并发方式请求函数B进行处理。然而,您提到函数B并不会同时接收到所有订单,而是一次处理7到8个订单。

    这样的情况可能是由于您在使用async.mapLimit函数时指定了并发限制为100,这意味着最多会同时处理100个订单。但是,函数B的实际实现可能无法同时处理100个订单,而只能处理较少数量的订单。

    如果您希望函数B能够同时处理更多的订单,您可以尝试逐步增加并发限制值,例如逐渐增加到20、50、80,以找到最佳的同时处理数量。这可以通过在async.mapLimit函数的第二个参数中逐渐增加限制值来实现。

    另外,请确保在函数B的实现中没有其他限制或阻塞操作,以确保它能够并行处理尽可能多的订单。

    希望这些提示对您有所帮助!如果您有任何其他疑问,请随时提问。

    2023-06-25 12:14:32
    赞同 展开评论 打赏
  • 根据您提供的代码,这段代码是一个使用Express框架编写的Node.js后端接口。在/batch_self_rate路由中,它接收一个POST请求,并从请求体中获取到Orders参数。

    然后,它使用async.mapLimit函数对Orders数组进行并发处理,限制最大并发数为100。每次迭代都会调用allrate.post_rate函数来处理订单数据,并通过回调函数将结果返回。

    最终,在所有订单处理完成后,通过回调函数返回结果给客户端。

    2023-06-25 12:01:39
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    同学你好,根据你提供的代码,虽然你使用了async异步方法,但是async.mapLimit函数用的方式不对,所以每次只能请求一个函数。

    改进建议:

    app.post('/batch_self_rate', (req, res) => {
      const orders = req.body;
      const batchSize = 100;
      const batchIds = [];
    
      for (let i = 0; i < orders.length; i++) {
        batchIds.push(orders[i].batch_id);
      }
    
      // 同时请求多个函数B
      async.mapLimit(batchIds.map(batchId => {
        return allrate.post_rate(batchId, (err, result) => {
          if (err) {
            console.log(err);
            res.send({ code: 400, msg: "试算价格失败" + err.message });
          } else {
            console.log(result);
            res.send({ result: result });
          }
        });
      }), (err, results) => {
        if (err) {
          console.log(err);
          res.send({ code: 400, msg: "试算价格失败" + err.message });
        } else {
          res.send({ result: results });
        }
      });
    });
    
    2023-06-25 10:37:50
    赞同 展开评论 打赏
问答地址:

快速交付实现商业价值。

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载