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

如何将npm包g-i-s的回调返回结果存入变量并支持await调用

解决方案

核心思路是将回调风格的g-i-s调用封装为Promise,即可通过async/await语法将返回结果赋值给变量后续使用。

方法1:手动封装Promise(兼容所有环境)

const gis = require('g-i-s');

// 封装返回Promise的g-i-s调用
function promisifiedGis(searchKeyword) {
  return new Promise((resolve, reject) => {
    gis(searchKeyword, (error, results) => {
      if (error) {
        return reject(error);
      }
      resolve(results);
    });
  });
}

// 异步函数内使用await获取结果存入变量
async function processSearch() {
  try {
    // 搜索结果直接存入变量
    const searchResults = await promisifiedGis('cats');
    // 此处及后续同作用域内均可正常使用searchResults变量
    console.log(JSON.stringify(searchResults, null, '  '));
  } catch (error) {
    console.error('搜索失败:', error);
  }
}

processSearch();

方法2:使用Node.js内置工具快速转换(仅Node.js环境)

可以直接调用Node.js util模块内置的promisify方法完成回调函数到Promise风格的转换,无需手动封装:

const gis = require('g-i-s');
const { promisify } = require('util');

const promisifiedGis = promisify(gis);

async function processSearch() {
  try {
    const searchResults = await promisifiedGis('cats');
    // 后续可任意使用searchResults变量
  } catch (error) {
    console.error(error);
  }
}

processSearch();

注意事项

  • 所有依赖搜索结果的逻辑必须放在await语句后的同一个异步函数作用域内,或通过参数传递给其他函数调用,异步操作的结果无法在同步代码中直接获取。
  • 浏览器环境无内置util.promisify,直接使用第一种手动封装方案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:18:02