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 1
在外部定义一个变量然后在 get 的回调函数里赋值不可以吗?
|
2
chairuosen 2018-04-28 09:25:34 +08:00 1
最后一行 console.log 会最先运行
|
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(); }); |
4
0312birdzhang 2018-04-28 09:28:51 +08:00 1
db.xx 是异步的,所以你拿不到,用回调吧
|
5
wzw OP @per #1 我现在去看看如何 js 回调
@chairuosen #2 是的,因为是异步 @binux #3 这样不可以的 @0312birdzhang #4 写个 demo 给我, 要不然我还得自己研究一会 |
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) |
7
wzw OP @losingyoung 一万个感谢了...
|
8
0312birdzhang 2018-04-28 09:52:37 +08:00
@wzw #5 看 #6,还要给你写 demo ?不存在的
|
9
horizon 2018-04-28 09:55:09 +08:00 1
异步的,用全局变量保存也没用。楼上的 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 楼的是对的
|