函数的返回值是promise<pending>怎么解决?
之前貌似很少写过promise, async, await相关的内容。我大概知道await使用的时候,函数必须外边有async. 我今天写函数的时候,写了一个函数,然后调用的时候,发现返回的是promise<pending>的状态。但是我在调用的函数里面打log, 是能打出来结果的,搜了很长时间才找到答案。最后也解决了。这里记录一下:var rs={score:0};var g...
之前貌似很少写过promise, async, await相关的内容。我大概知道await使用的时候,函数必须外边有async. 我今天写函数的时候,写了一个函数,然后调用的时候,发现返回的是promise<pending>
的状态。但是我在调用的函数里面打log, 是能打出来结果的,搜了很长时间才找到答案。最后也解决了。这里记录一下:
var rs={score:0};
var getAs= async function() {
const doc = await client.zscore('myzset', 'one', function (err, res) {
console.log("score-1-:"+res);
rs.score=res
return res;
});
return doc;
}
getAs().then(function (result) {
console.log("then:"+result);
});
console.log("#############"+rs.score);
上面这个例子,是想使用redis的zscore来获取数据。我们不关心函数是干嘛的,这个函数用async, await写的。然后下面的函数getAs()进行了调用,还通过then方法,来获取result. 但是这里获取失败了。哪里出问题了?首先上面的async, await返回的是一个promise对象。所以它肯定返回不了想要的result. 只能是在resolve之后把结果给返回来。即使用了then方法,拿到的也是promise. 所以对上面代码做一下修改。
const rs = { score: 0 };
const getAs = async () => {
const doc = await new Promise((resolve) => {
client.zscore('myzset', 'one', (err, res) => {
console.log(`score-1-:${res}`);
rs.score = res;
return resolve(res);
});
});
return doc;
};
getAs()
.then((result) => {
console.log(`then:${result}`);
});
console.log(`#############${rs.score}`);
下面的代码只是在getAs这个函数外面包了一层。这样返回的结果就是resolve之后的结果了。
await 返回的值是promise返回的值。而promise返回的值是需要设定的,我们要的是resolve的,我们就返回resolve的。
参考:
https://segmentfault.com/q/1010000010424097
更多推荐
所有评论(0)