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

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

  •  
  •   wzw · 110 天前 · 811 次点击
    这是一个创建于 110 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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
        1
    per   110 天前 via iPhone   ♥ 1
    在外部定义一个变量然后在 get 的回调函数里赋值不可以吗?
        2
    chairuosen   110 天前   ♥ 1
    最后一行 console.log 会最先运行
        3
    binux   110 天前   ♥ 1
    let val;
    db.get('a', function(err, v){
    console.log('get a = ' + val);
    val = v;
    ssdb.close();
    });
        4
    0312birdzhang   110 天前   ♥ 1
    db.xx 是异步的,所以你拿不到,用回调吧
        5
    wzw   110 天前
    @per #1 我现在去看看如何 js 回调

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

    @binux #3 这样不可以的

    @0312birdzhang #4 写个 demo 给我, 要不然我还得自己研究一会
        6
    losingyoung   110 天前   ♥ 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)
        7
    wzw   110 天前
    @losingyoung 一万个感谢了...
        8
    0312birdzhang   110 天前
    @wzw #5 看 #6,还要给你写 demo ?不存在的
        9
    horizon   110 天前   ♥ 1
    异步的,用全局变量保存也没用。楼上的 Promise 靠谱点。要么用 await
        10
    wzw   110 天前
    @0312birdzhang #8 6 楼给了, 瞬间明白了,,,
        11
    wzw   110 天前
    @horizon #9 六楼大哥 给了完美答案
        12
    binux   110 天前
    @wzw #5 你只说要取出来,并没有说要立即使用啊
        13
    jin5354   110 天前
    promise 简单实用
        14
    per   110 天前 via iPhone
    6 楼的是对的
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   实用小工具   ·   3053 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 16ms · UTC 07:48 · PVG 15:48 · LAX 00:48 · JFK 03:48
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1