V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wzw
V2EX  ›  问与答

js 的一个问题, 大家帮忙看看, 如何把值取出来用.

  •  
  •   wzw · 2018-04-28 09:19:44 +08:00 · 1735 次点击
    这是一个创建于 2400 天前的主题,其中的信息可能已经有所发展或是发生改变。

    demo 代码是:

    db.set('a', new Date(), function(){
    	console.log('set a');
    });
    db.get('a', function(err, val){
    	console.log('get a = ' + val);
    	ssdb.close();
    });
    

    我的需求是, get 得到的 val 希望可以 继续使用.

    db.set('a', new Date(), function(){
    	console.log('set a');
    });
    db.get('a', function(err, val){
    	console.log('get a = ' + val);
    	ssdb.close();
    });
    
    console.log(val);
    
    

    有什么办法? 谢谢

    14 条回复    2018-04-28 12:14:50 +08:00
    per
        1
    per  
       2018-04-28 09:22:34 +08:00 via iPhone   ❤️ 1
    在外部定义一个变量然后在 get 的回调函数里赋值不可以吗?
    chairuosen
        2
    chairuosen  
       2018-04-28 09:25:34 +08:00   ❤️ 1
    最后一行 console.log 会最先运行
    binux
        3
    binux  
       2018-04-28 09:26:51 +08:00   ❤️ 1
    let val;
    db.get('a', function(err, v){
    console.log('get a = ' + val);
    val = v;
    ssdb.close();
    });
    0312birdzhang
        4
    0312birdzhang  
       2018-04-28 09:28:51 +08:00   ❤️ 1
    db.xx 是异步的,所以你拿不到,用回调吧
    wzw
        5
    wzw  
    OP
       2018-04-28 09:47:22 +08:00
    @per #1 我现在去看看如何 js 回调

    @chairuosen #2 是的,因为是异步

    @binux #3 这样不可以的

    @0312birdzhang #4 写个 demo 给我, 要不然我还得自己研究一会
    losingyoung
        6
    losingyoung  
       2018-04-28 09:49:27 +08:00   ❤️ 1
    恐怕只能在回调里面写,就算在外面定义变量,赋值还是回调里赋值 外面直接用还是 undefined,优雅一点可以加一层 promise
    function getter(a) {
    return new Promise((resolve, reject) => {
    db.get(a, (err, val) => {
    if (err) {
    reject(err)
    return
    }
    let value = val
    console.log('get a = ' + val);
    ssdb.close();
    resolve(value)
    });
    })
    }

    getter('a').then(val => {console.log(val)})
    或者如果可以用 async
    let val = await getter('a')
    console.log(val)
    wzw
        7
    wzw  
    OP
       2018-04-28 09:52:14 +08:00
    @losingyoung 一万个感谢了...
    0312birdzhang
        8
    0312birdzhang  
       2018-04-28 09:52:37 +08:00
    @wzw #5 看 #6,还要给你写 demo ?不存在的
    horizon
        9
    horizon  
       2018-04-28 09:55:09 +08:00   ❤️ 1
    异步的,用全局变量保存也没用。楼上的 Promise 靠谱点。要么用 await
    wzw
        10
    wzw  
    OP
       2018-04-28 09:58:46 +08:00
    @0312birdzhang #8 6 楼给了, 瞬间明白了,,,
    wzw
        11
    wzw  
    OP
       2018-04-28 09:59:10 +08:00
    @horizon #9 六楼大哥 给了完美答案
    binux
        12
    binux  
       2018-04-28 10:11:38 +08:00
    @wzw #5 你只说要取出来,并没有说要立即使用啊
    jin5354
        13
    jin5354  
       2018-04-28 10:28:30 +08:00
    promise 简单实用
    per
        14
    per  
       2018-04-28 12:14:50 +08:00 via iPhone
    6 楼的是对的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3034 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:50 · PVG 18:50 · LAX 02:50 · JFK 05:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.