我有一个组件,该组件获取作为道具的项目map
集合,并将其作为呈现为父组件子项的组件集合。我们使用存储WebSQL
为字节数组的图像。在map
函数中,我从项目中获取图像ID,并异步调用,DAL
以获取图像的字节数组。我的问题是我无法将诺言传播到React中,因为它不是设计来处理渲染中的诺言的(无论如何我还是不能说的)。我来自C#
背景,所以我猜我在寻找类似await
关键字的内容来重新同步分支代码。
该map
函数看起来像这样(简化):
var items = this.props.items.map(function (item) {
var imageSrc = Utils.getImageUrlById(item.get('ImageId')); // <-- this contains an async call
return (
<MenuItem text={item.get('ItemTitle')}
imageUrl={imageSrc} />
);
});
该getImageUrlById
方法如下所示:
getImageUrlById(imageId) {
return ImageStore.getImageById(imageId).then(function (imageObject) { //<-- getImageById returns a promise
var completeUrl = getLocalImageUrl(imageObject.StandardConImage);
return completeUrl;
});
}
这是行不通的,但是我不知道我需要修改什么才能使它工作。我尝试向链中添加另一个Promise,但是由于我的render函数返回一个Promise而不是合法的JSX,因此出现错误。我当时在想,也许我需要利用一种React
生命周期方法来获取数据,但是由于我需要props
已经存在该方法,所以我不知道该在哪里进行操作。
componentWillMount
而不是componentDidMount
为了没有初始的“空”渲染。componentWillMount
在初始渲染之前运行。