javascript - 您如何访问和存储“已实现”承诺的值/属性?
问题描述
我正在尝试构建一个渲染某个星球细节的对象。我使用 fetch 方法,它返回一个承诺。如何从 [[PromiseResult]] 对象中获取值以填充“render()”中的详细信息。我尝试从渲染中的 ${ } 调用 fetchPlanetData().then(data=>data.(any property)(它们现在有占位符),但它总是返回“未定义”。提前致谢。
class PlanetDetails {
constructor(planet) {
this.planet = planet;
//this.fetchPlanetData();
this.render();
}
async fetchPlanetData() {
const result = await fetch(`https://api.le-systeme-solaire.net/rest/bodies/${this.planet}`);
this.data = await result.json();
return this.data;
}
render() {
const hook = document.querySelector('.moons');
const container = document.createElement('div');
container.className = 'container';
container.innerHTML = `
<p>The average temperature is:${'averageTemp'}</p>
<p>The escape velocityis:${'escape'}</p>
<p>The gravity is ${'gravity'} times that of Earth's.</p>
`;
hook.append(container);
}
}
const planetDetails = new PlanetDetails('neptune');
console.log(planetDetails.fetchPlanetData());``
解决方案
不要放入this.render
构造函数,而是调用一个新的异步方法init
并从构造函数调用它。await
从 中获取数据fetchPlanetData
,将其分配给this.data
,然后调用this.render
。
注意:看起来您没有使用this.data
渲染方法中的任何数据。例如,当您编码${'averageTemp'}
时,您的意思是${this.data.averageTemp}
?
class PlanetDetails {
constructor(planet) {
this.planet = planet;
this.init();
}
async init() {
this.data = await this.fetchPlanetData();
this.render();
}
async fetchPlanetData() {
const result = await fetch(url);
return result.json();
}
...
}
推荐阅读
- arrays - 当我尝试从循环内的数组中删除元素时,为什么会出现致命错误?
- ansible - uri正文中单引号,双引号的ansible问题
- git - 如何在 GitHub 存储库页面上删除贡献者?
- python - 在数组计算后预测 numpy 数组数据类型
- php - 如何翻译 Laravel Page Builder?
- javascript - 在浏览器中同时录制和播放流式音频
- node.js - Express.json() 返回未定义
- python - 使用 selenium python 获取带有已识别元素的 h3 标签文本
- angular - rxjs 管道到 observable 绑定到 observable 引用时不会引发
- javascript - 将帧缓冲区转储转换为图像(bmp、png 等)