js异步return

发布于 2022-09-04 13:46:23 字数 454 浏览 11 评论 0

有点理不清异步return的逻辑,b函数里把a函数的返回值打印,a函数的返回值是异步得到的,所以一开始会得到空数组,怎么修改能使得data不为空之后再return出来呀

        function a(){
            console.log('a');
            var data=[];
            setTimeout(function (){
                data.push([1]);
            },1000);
            return data;
        }
        
        function b(){
            console.log('b');
            var d=a();
            console.log(d);
        }

        b();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

等你爱我 2022-09-11 13:46:23

用回调函数通知或者使用 async function

function getData(callback) {
  const data = []
  console.info(data)
  setTimeout(_ => {
    data.push(+new Date())
    typeof callback === 'function' && callback(data)
  }, 1e3)
}

getData(data => console.info(data))
async function getData() {
  const sleep = delay => new Promise(resolve => setTimeout(resolve, delay || 0))
  const data = []
  console.info(data)
  await sleep(1000)
  data.push(+new Date())
  return data
}

;(async _ => {
  console.info(await getData())
})()
追星践月 2022-09-11 13:46:23
function a(solve){
    console.log('a');
    var data=[];
    setTimeout(function (){
       data.push([1]);
       solve(data);
    },1000);
}
function b(data){
   console.log(data);
}
new Promise(a).then(b);
茶底世界 2022-09-11 13:46:23

通过Promise来解决吧。

function a() {
    console.log('a');
    var data = [];
    return new Promise(function(resolve, reject){
      setTimeout(function() {
          data.push([1]);
          resolve(data);
      }, 1000);
    })
}

function b() {
    console.log('b');
    var d = a().then(function(data){
      console.log(data);
    })
}

b();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文