首页 问答 新人求问,异步变同步的问题?
问题详情

我的本意是想要卡住main()方法,因为main方法返回的结果是需要异步才能拿到,但是我这样写,打印出来的是个Promise,而不是一个具体的值

async function doSomethingAsync() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('Operation completed asynchronously');
    }, 2000);
  });
}
function doSomethingSync() {
  return doSomethingAsync();
}
// 同步调用异步函数
async function main() {
  console.log('Starting operation...');
  const result = await doSomethingSync(); // 等待异步操作完成
  console.log(result);
  console.log('Operation completed synchronously.');
  return result;
}
var result = main();
console.log('main result', result)

回答

函数只要加了async,返回值就会被包装为Promise,比如return 1,会被包装为Promise<1>,只能通过async /await 组合获取Promise的返回值,或者通过 main().then(x => console.log(x)),只能这样

函数只要加了async,返回值就会被包装为Promise

你这是属于异步函数同步调用,改成异步调用var result=await main()就达到你的目的了

按照下面这样写就行了
(async () => {
var result = await main();
console.log(‘main result’, result);
})();

是不是想把异步方法同步化,这个在很多框架里有实现,比如React里,上面需要包装一层,通过特殊的处理,比如Error

版权:言论仅代表个人观点,不代表官方立场。转载请注明出处:https://www.stntk.com/question/1118.html

发表评论
暂无评论

还没有评论呢,快来抢沙发~

点击联系客服

在线时间:8:00-16:00

客服QQ

70068002

客服电话

400-888-8888

客服邮箱

70068002@qq.com

扫描二维码

关注微信公众号

扫描二维码

手机访问本站