【发布时间】:2019-10-15 12:21:30
【问题描述】:
我有一个看起来像这样的对象并存储了一些属性:
基本上,我需要遍历这个对象并获取每个键的file 属性,我稍后将在我的代码中使用这些属性来生成多个Video-React 组件。我尝试使用map() 函数,但网站会因错误而崩溃:
Parsing error: Can not use keyword 'await' outside an async function.
即使我正在使用的代码示例位于 async 函数中。
这是我的代码:
const response = await dataProvider(GET_MANY, 'vid', { ids: videoId })
const file = response.data;
file.map( source => {
var videoPosition = 0;
var sigkey = "sigkey";
var formBody = new FormData();
formBody.set('ver', "1.2");
formBody.set('key', "key");
formBody.set('video_id', file[videoPosition].file);
formBody.set('user_id', "1234");
formBody.set('format', "json");
formBody.set('ip', "");
formBody.set('tts', "0");
formBody.set('nonce', Math.round((new Date()).getTime() / 1000));
var sign_fields = [formBody.get('video_id'), formBody.get('user_id'), formBody.get('ip'), formBody.get('tts'), formBody.get('ver'), formBody.get('key'), formBody.get('nonce')];
var data = sign_fields.join(':');
var signature = hmacsha256(data, sigkey);
formBody.set('sig', signature);
var formBodyStringified = new URLSearchParams(formBody).toString();
const resJson = await fetch(Config.api.livebox, {
method: 'POST',
body: formBodyStringified,
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).then(res => res.json());
const finalJsonUrl = 'https:' + resJson.hls;
this.setState({ videoSource: finalJsonUrl });
videoPosition++;
});
有什么建议可以循环遍历对象吗?
提前谢谢你。
【问题讨论】:
-
使用
for of代替地图。另外你没有使用地图的返回,所以 forEach 会更合乎逻辑。 -
将所有代码放在一个带有关键字
async的函数中。在async函数中,您可以使用尽可能多的await -
您的
await fetch确实不会出现在async函数中。 -
你需要在传递给
response.map的回调前面包含async关键字,我也建议你把地图放在Promise.all里面 -
@Keith 你介意发布一个例子吗?我真的不擅长循环。
标签: javascript asynchronous promise async-await