收藏
回答

云函数调用超时引用jimp和qrcode-reader运行时严重超时60秒都不够该怎么优化代码?

日志里显示的结果都完成的,但是云函数执行超时

const cloud = require('wx-server-sdk')
const decodeImage = require("jimp").read;
const qrcodeReader = require("qrcode-reader");
// const QrCode = require('qrcode-reader');
// const Jimp = require('jimp');
cloud.init({
  env: 'qun-6grsjea3162b771e',
})


exports.main = async (event, context) => {
  const data = event.fileID // 从小程序端传递过来的文件ID
  const code = await qrDecode(
    data,
    function (res) {
      console.log(res, '啦啦啦啦');
    }
  );
  async function qrDecode(data, callback) {
    console.log('啦啦啦啦啦', callback, data)
    await decodeImage(data, function (err, image) {
      console.log('啊啊啊啊')
      if (err) {
        callback(false);
        console.log(err)
        return;
      }
      let decodeQR = new qrcodeReader();
      decodeQR.callback =  function (errorWhenDecodeQR, result) {
        console.log('真真正正')


        if (errorWhenDecodeQR) {
          callback(false);
          console.log(errorWhenDecodeQR, 3)
          return;
        }
        if (!result) {
          callback(false);
          console.log(result, '2')
          return;
        } else {
          callback(result.result);
          console.log(result, '1')
          return
        }


      };
       decodeQR.decode(image.bitmap);
    });


  }
  return code
}


求教该怎么优化代码,怎么解决超时问题

回答关注问题邀请回答
收藏

3 个回答

  • 拾忆
    拾忆
    2023-10-29

    代码优化给不了建议,可以设置超时时间。

    2023-10-29
    有用 1
    回复 1
    • 默枫
      默枫
      2023-10-30
      超时太多了,60秒执行一次已经没意义了
      2023-10-30
      回复
  • CRMEB
    CRMEB
    2023-10-30

    为了优化代码并解决超时问题,你可以尝试以下方法:


    1. 使用`Promise.race()`来设置一个超时时间。这样,如果某个操作在指定的时间内没有完成,就会触发超时错误。


    2. 将`qrcodeReader`的回调函数改为返回`Promise`,以便更好地处理异步操作。


    下面是优化后的代码:


    const cloud = require('wx-server-sdk')
    const decodeImage = require("jimp").read;
    const qrcodeReader = require("qrcode-reader");
    
    cloud.init({
      env: 'qun-6grsjea3162b771e',
    })
    
    exports.main = async (event, context) => {
      const data = event.fileID // 从小程序端传递过来的文件ID
      const code = await qrDecode(
        data,
        function (res) {
          console.log(res, '啦啦啦啦');
        }
      );
      return code
    }
    
    async function qrDecode(data, callback) {
      console.log('啦啦啦啦', callback, data)
      await decodeImage(data, function (err, image) {
        console.log('啊啊啊啊')
        if (err) {
          callback(false);
          console.log(err)
          return;
        }
        let decodeQR = new qrcodeReader();
        decodeQR.callback =  function (errorWhenDecodeQR, result) {
          console.log('真真正正')
    
          if (errorWhenDecodeQR) {
            callback(false);
            console.log(errorWhenDecodeQR, 3)
            return;
          }
          if (!result) {
            callback(false);
            console.log(result, '2')
            return;
          } else {
            callback(result.result);
            console.log(result, '1')
            return
          }
        };
        decodeQR.decode(image.bitmap);
      });
    }
    


    这样,你的代码应该能够更好地处理超时问题。如果仍然遇到超时问题,可以考虑进一步优化代码或增加服务器资源。

    2023-10-30
    有用
    回复
  • 默枫
    默枫
    2023-10-30

    云函数本地调试,好像代码执行完成了,但是云函数还在执行导致超时

    2023-10-30
    有用
    回复
登录 后发表内容