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

2018 年 4 月 28 日
 wzw

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);

有什么办法? 谢谢

2219 次点击
所在节点    问与答
14 条回复
per
2018 年 4 月 28 日
在外部定义一个变量然后在 get 的回调函数里赋值不可以吗?
chairuosen
2018 年 4 月 28 日
最后一行 console.log 会最先运行
binux
2018 年 4 月 28 日
let val;
db.get('a', function(err, v){
console.log('get a = ' + val);
val = v;
ssdb.close();
});
1daydayde
2018 年 4 月 28 日
db.xx 是异步的,所以你拿不到,用回调吧
wzw
2018 年 4 月 28 日
@per #1 我现在去看看如何 js 回调

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

@binux #3 这样不可以的

@0312birdzhang #4 写个 demo 给我, 要不然我还得自己研究一会
losingyoung
2018 年 4 月 28 日
恐怕只能在回调里面写,就算在外面定义变量,赋值还是回调里赋值 外面直接用还是 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
2018 年 4 月 28 日
@losingyoung 一万个感谢了...
1daydayde
2018 年 4 月 28 日
@wzw #5 看 #6,还要给你写 demo ?不存在的
horizon
2018 年 4 月 28 日
异步的,用全局变量保存也没用。楼上的 Promise 靠谱点。要么用 await
wzw
2018 年 4 月 28 日
@0312birdzhang #8 6 楼给了, 瞬间明白了,,,
wzw
2018 年 4 月 28 日
@horizon #9 六楼大哥 给了完美答案
binux
2018 年 4 月 28 日
@wzw #5 你只说要取出来,并没有说要立即使用啊
jin5354
2018 年 4 月 28 日
promise 简单实用
per
2018 年 4 月 28 日
6 楼的是对的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/450578

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX