87,923
社区成员
发帖
与我相关
我的任务
分享
<script type="text/javascript">
function fn(){
//todo
return 123;
}
async function demo() {
let result = await Promise.resolve(fn());
console.log(result);
return result;
}
var test= demo();
console.log('test:',test);
</script>
$('#cc').combobox({
data:demo()
valueField:'id',
textField:'text'
});
[/quote]
你要知道,虽然await的调用从代码结构上看似乎是同步顺序执行,但实际上还是异步回调的执行机制。
async函数中await之后的代码就是异步回调的部分,只有执行了resolve,异步回调的部分才能执行。
也就是说能够等待的代码只是async函数(demo)中await之后的代码。async函数(demo)之外的代码不会等待。
如果需要调用demo()的地方也等待,就需要调用demo()的函数也是async函数,并用await来调用demo()。
以此类推,再外层的函数还需要等待,就也要改成async函数。
async function xxxxxx() {//$('#cc').combobox()所在的函数
$('#cc').combobox({
data: await demo(),
valueField:'id',
textField:'text'
});
}
$('#cc').combobox({
data:demo()
valueField:'id',
textField:'text'
});
<script type="text/javascript">
function fn(){
//todo
return 123;
}
async function demo() {
let result = await Promise.resolve(fn());
console.log(result);
return result;
}
async function pf() {
var test = await demo();
console.log('test:',test);
}
pf();
</script>