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);
有什么办法? 谢谢
![]() | 1 per 2018-04-28 09:22:34 +08:00 via iPhone ![]() 在外部定义一个变量然后在 get 的回调函数里赋值不可以吗? |
![]() | 2 chairuosen 2018-04-28 09:25:34 +08:00 ![]() 最后一行 console.log 会最先运行 |
![]() | 3 binux 2018-04-28 09:26:51 +08:00 ![]() let val; db.get('a', function(err, v){ console.log('get a = ' + val); val = v; ssdb.close(); }); |
![]() | 4 1daydayde 2018-04-28 09:28:51 +08:00 ![]() db.xx 是异步的,所以你拿不到,用回调吧 |
![]() | 5 wzw OP @per #1 我现在去看看如何 js 回调 @chairuosen #2 是的,因为是异步 @binux #3 这样不可以的 @0312birdzhang #4 写个 demo 给我, 要不然我还得自己研究一会 |
![]() 恐怕只能在回调里面写,就算在外面定义变量,赋值还是回调里赋值 外面直接用还是 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 OP @losingyoung 一万个感谢了... |
9 horizon 2018-04-28 09:55:09 +08:00 ![]() 异步的,用全局变量保存也没用。楼上的 Promise 靠谱点。要么用 await |
![]() | 10 wzw OP @0312birdzhang #8 6 楼给了, 瞬间明白了,,, |
![]() | 13 jin5354 2018-04-28 10:28:30 +08:00 promise 简单实用 |
![]() | 14 per 2018-04-28 12:14:50 +08:00 via iPhone 6 楼的是对的 |