V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
aglsv
V2EX  ›  JavaScript

想请教一下关于获取计时器内部数据的问题

  •  
  •   aglsv · 2021-08-01 17:44:06 +08:00 · 1648 次点击
    这是一个创建于 1210 天前的主题,其中的信息可能已经有所发展或是发生改变。
    function a (){
     let a = 0
     a = 1
     let loader = setInterval(function () {
                abc () 
                clearInterval(loader)
            }, 1000)
            
     function abc (){
     	a +=1
     }
     
     return a
    }
    
    

    我的预想是 return 的 a 为 2,但是现在 return 的结果依旧是 1,请问这个该怎么解决啊

    9 条回复    2021-08-03 15:24:33 +08:00
    lianyue
        1
    lianyue  
       2021-08-01 19:00:30 +08:00
    返回的时候 setInterval 里面的函数并没被执行
    aglsv
        2
    aglsv  
    OP
       2021-08-01 19:06:34 +08:00
    @lianyue 那这个该怎么解决
    lianyue
        3
    lianyue  
       2021-08-01 19:20:03 +08:00
    async
    await
    promise

    自己了解
    lianyue
        4
    lianyue  
       2021-08-01 19:20:10 +08:00
    rabbbit
        5
    rabbbit  
       2021-08-01 19:24:08 +08:00
    const foo = () => {
      let bar = 1
      return new Promise(resolve => {
       setTimeout(() => resolve(++bar), 3000)
     })
    }

    (async() => console.log(await foo()))()
    aglsv
        6
    aglsv  
    OP
       2021-08-02 13:55:15 +08:00
    @rabbbit 如果没法子使用 async 的话请问这个应该如何解决
    aglsv
        7
    aglsv  
    OP
       2021-08-02 13:55:37 +08:00
    @lianyue 主要是没法子使用 async
    rabbbit
        8
    rabbbit  
       2021-08-02 15:00:35 +08:00
    const foo = () => {
    let bar = 1;
    return new Promise((resolve) => {
      setTimeout(() => resolve(++bar), 3000);
    });
    };

    (() => {
      foo().then((bar) => {
       console.log(bar)
     })
    })();


    const foo = (callback) => {
    let bar = 1;
    setTimeout(() => {
      bar++;
      callback?.(bar)
    }, 3000);
    };

    (() => {
      foo((bar) => console.log(bar))
    })();
    aglsv
        9
    aglsv  
    OP
       2021-08-03 15:24:33 +08:00
    @rabbbit 我想问一下第一种,比如 a 有一个```b+=bar```,然后把 b 给 return 出去,这时候因为 foo 里有个异步操作使用了 promise,这样的话就需要在 a 方法里面执行.then 来获取 bar,这样的话会是先```return b```,然后才执行```b+=bar```。
    因为这个 b 要被上层方法使用,不能再把 a 方法也写成 promise,这样的话有办法解决吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2597 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 04:56 · PVG 12:56 · LAX 20:56 · JFK 23:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.