如何将app-store-scraper接口.then的返回结果赋值给变量?
解决方案
问题原因
store.app()方法返回的是Promise异步对象,你直接赋值给变量拿到的是Promise实例而非查询结果,必须等待异步执行完成后才能获取到有效数据。
基础用法:将结果存入变量
所有使用查询结果的逻辑必须放在then回调中,或在await语句之后执行:
const store = require('app-store-scraper'); let result = null; store.app({id: 553834731}) .then(data => { // 此处才能拿到有效结果存入变量 result = data; console.log(result); }) .catch(err => console.error('查询出错:', err));
Web服务返回结果的实现
因为res.end()仅支持传入字符串或Buffer类型,所以需要将查询到的对象结果转为JSON字符串后再返回,这里提供两种写法:
写法1:async/await(更简洁易读)
以Express框架为例:
const express = require('express'); const store = require('app-store-scraper'); const app = express(); app.get('/app-info', async (req, res) => { try { // 等待异步查询完成获取结果 const appData = await store.app({id: 553834731}); // 转成JSON字符串后返回 res.end(JSON.stringify(appData)); } catch (err) { res.statusCode = 500; res.end(JSON.stringify({ error: '查询应用信息失败', message: err.message })); } }); app.listen(3000, () => console.log('服务已启动,端口3000'));
写法2:Promise.then回调写法
app.get('/app-info', (req, res) => { store.app({id: 553834731}) .then(appData => { res.end(JSON.stringify(appData)); }) .catch(err => { res.statusCode = 500; res.end(JSON.stringify({ error: '查询应用信息失败', message: err.message })); }); });
注意事项
- 不要在异步操作未完成时访问结果变量,否则会拿到
undefined或Promise对象 - 返回给前端前必须将对象类型的结果通过
JSON.stringify()转为字符串格式,否则res.end()会报错
内容的提问来源于stack exchange,提问作者oredgaming
相关产品推荐
相关产品推荐

