async getData(i){
//这个函数是异步的从服务器获取data
//怎么获取略
//最后return data
return data;
}
onLoad:function(){
for(int i=1;i<data.length;i++){
this.setData({
abc[i]:getData(i);
})
}
}
但是setData执行完了,getData才return,怎么等getData执行完了,我在setData
拒绝使用callback和把操作写到getdata里,因为我就是要for循环。
楼主可能需要加强一下 es6 的基础知识:
function getData(index, callback) { setTimeout(function () { callback(null, `${index} is done`); }, 1000) }
function asyncGetData(index) { return new Promise(function (resolve, reject) { getData(index, function (err, res) { if (err) { reject(err); return; } resolve(res); }); }); }
async function loadData() { // 一般来说,循环中使用 await 是不提倡的,部分 babel 转换器在特殊情况下会产生 bug for (let i = 0; i < 5; i++){ try { const data = await asyncGetData(i); // 请注意 await 几个字不能少,否则 data 将是一个 Promise console.log(`data ${i} = ${data}`); setData({ dataKey: data }); } catch (err) { console.log(`err = ${err}`); } } }
- 将字符串用 `` 号包裹;
- 在其中可将变量、表达式、函数表达式等用 ${ } 包裹;
- 其效果为:执行 ${ } 内的表达式,将其返回值作为字符串合并至整个字符串。
- 例:
function hello() {
return 'good night';
}
console.log(`Trump said ${hello()} to you this morning.`); // 输出字符串 'Trump said good night to you this morning.'
https://developers.weixin.qq.com/community/develop/article/doc/00028cbc2e04e0ddf549d535351c13