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

Sails.js中http.get与回调函数疑问:异步概念困惑求助

帮你完善Sails.js异步获取评论并生成评分的函数

嘿,刚上手JavaScript异步编程和Sails.js确实容易有点懵,我来帮你把这段代码补全并理清楚关键要点~

首先,你的函数是Sails.js里的action,用了async关键字,那咱们就用更清晰的await来处理异步请求,替代回调函数,避免回调地狱。下面是完善后的代码,我会一步步解释:

fn: async function (inputs, exits) {
  let commentsUrl = 'http://foobar.com';
  let score = {};

  try {
    // 发送GET请求获取评论数据,这里用Sails内置的HTTP客户端(返回Promise,支持await)
    const response = await sails.http.get(commentsUrl);
    // 解析响应体为JSON对象(Sails的http.get会自动解析JSON响应,不用手动JSON.parse)
    const comments = response.body;

    // 这里根据你的需求生成score对象,举个实际例子:
    // 假设每条评论有rating字段(1-5分),统计各评分区间数量+平均分
    score.total = comments.length;
    score.positive = comments.filter(comment => comment.rating >= 4).length;
    score.neutral = comments.filter(comment => comment.rating === 3).length;
    score.negative = comments.filter(comment => comment.rating <= 2).length;
    score.averageRating = comments.length 
      ? comments.reduce((sum, comment) => sum + comment.rating, 0) / comments.length 
      : 0; // 处理空评论的情况,避免除以0

    // 成功返回score对象
    return exits.success(score);
  } catch (err) {
    // 捕获所有异常:请求失败、网络错误、JSON解析失败等
    sails.log.error('获取评论或生成评分出错:', err.message);
    // 返回错误给调用方
    return exits.error(err);
  }
}

关键知识点说明:

  • 异步处理:因为用了async函数,所以用await等待HTTP请求完成,这比传统的回调写法更易读,也符合Sails.js的最佳实践。
  • 错误捕获:必须用try/catch包裹所有异步操作,不然一旦请求失败或者解析出错,整个action会崩溃,catch块里可以记录日志并返回错误信息。
  • HTTP请求:Sails内置了http模块,sails.http.get返回Promise,直接用await即可。如果你的Sails版本不支持,也可以安装axios或node-fetch,用法类似:比如const response = await axios.get(commentsUrl);。
  • 评分逻辑:上面的例子是基于评论的rating字段统计,你可以根据实际需求修改——比如做情感分析、关键词提取来计算评分,核心就是遍历评论数组,根据规则生成对应的score属性。

额外注意事项:

  • 确保目标URL的服务器允许你的Sails服务器发起请求(后端请求不受浏览器CORS限制,只要对方服务器没IP白名单限制就行)。
  • 如果评论数据量很大,建议分批次请求(比如分页),避免一次性加载过多数据导致内存占用过高。
  • 可以给HTTP请求加超时设置,比如sails.http.get(commentsUrl, { timeout: 5000 }),防止请求卡住。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:58:05