如何将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
相关产品推荐
相关产品推荐

