You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中cari函数匹配成功后sendMessage仍重复执行问题

cari函数运行异常问题

异常现象

  • 查询匹配到正确目标数据时,本不该触发的错误提示逻辑仍会执行,导致sendMessage方法被调用两次:先返回正确的材料查询结果,随后弹出材料不存在或命令不符合规则的错误提示,该异常在数据匹配正确场景下本不应出现。

异常关联错误代码段

txt = 'Material '+pola[1]+' tidak ditemukan atau perintah command tidak sesuai';
sendMessage(cid,txt);

问题复现截图

运行截图1
运行截图2

问题相关完整源码

function cari(cid,cmd){
  var txt = '';
  var pola = cmd.match(/cari#(.+)/);
  if (pola[1]!=''){
    var rs = bacadata();
    for (var i=0;i<rs.length;i++) {
      if (rs[i][0] == pola[1]){
        txt = 'Material '+pola[1]+' adalah '+rs[i][1];
        sendMessage(cid,txt);
      }
    }
    txt = 'Material '+pola[1]+' tidak ditemukan atau perintah command tidak sesuai';
    sendMessage(cid,txt);
  }
}

根因分析

  • 错误提示逻辑位于for循环外部,与循环体同级,无论循环中是否匹配到目标数据,循环执行结束后都会固定执行错误提示的sendMessage调用,这是匹配成功时重复发消息的直接原因。
  • 代码存在额外隐患:若正则/cari#(.+)/匹配失败,pola值为null,直接访问pola[1]会触发类型错误。

修复方案

  1. 新增匹配状态标记,遍历完所有数据后,仅在未找到匹配项时才触发错误提示
  2. 新增正则匹配结果的空值判断,避免空指针报错
  3. 匹配到目标数据后直接跳出循环,减少不必要的遍历

修复后代码:

function cari(cid,cmd){
  var txt = '';
  var pola = cmd.match(/cari#(.+)/);
  if (pola && pola[1] != ''){
    var rs = bacadata();
    var isMatched = false;
    for (var i=0;i<rs.length;i++) {
      if (rs[i][0] == pola[1]){
        txt = 'Material '+pola[1]+' adalah '+rs[i][1];
        sendMessage(cid,txt);
        isMatched = true;
        break;
      }
    }
    if (!isMatched) {
      txt = 'Material '+pola[1]+' tidak ditemukan atau perintah command tidak sesuai';
      sendMessage(cid,txt);
    }
  }
}

内容的提问来源于stack exchange,提问作者Newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 15:15:32