Javascript 调用异步函数返回属性名为数字的承诺对象
我将此代码称为:Javascript 调用异步函数返回属性名为数字的承诺对象,javascript,react-native,es6-promise,Javascript,React Native,Es6 Promise,我将此代码称为: Permissions.check('photo') .then(response => { ... }); 在这里,我可以使用响应对象来检查值。 但我想用wait来称呼它,比如: async function test() { let test = await Permissions.check('photo'); return test; } ... let result = test(); 但这会返回如下所示的Pr
Permissions.check('photo')
.then(response => {
...
});
在这里,我可以使用响应对象来检查值。但我想用wait来称呼它,比如:
async function test() {
let test = await Permissions.check('photo');
return test;
}
...
let result = test();
但这会返回如下所示的Promise对象:
Promise {_40: 0, _65: 0, _55: null, _72: null}
test().then(response => {
response._55; // ...
});
我通常在响应中得到的值
这里我在结果中得到
我可以做些什么来获得合适的对象?您是否希望能够像这样以同步方式使用test
let result = test();
result._55; // ...
很抱歉让你失望,但那不行
异步函数不会将异步操作转换为同步操作。异步函数返回一个承诺,该承诺将值包装在return…
语句中。这意味着您的测试功能相当于:
function test() {
return Permissions.check('photo').then(result => result);
}
。。。这是毫无意义的,因为你现在必须这样使用它:
Promise {_40: 0, _65: 0, _55: null, _72: null}
test().then(response => {
response._55; // ...
});
只需坚持您的第一个解决方案。以下是您的一些选择:
坚持你已经在做的事情
function main() {
Permissions.check('photo')
.then(response => {
...
});
}
main();
如果要执行类似于let result=Permissions.check()
wherePermissions.check()
返回承诺的操作,实际上需要(a)使用wait
关键字,以及(b)将let result
语句放入async
函数中
async function main() {
let result = await Permissions.check('photo');
}
main();
我希望这有帮助 如果您将等待
和然后
组合在一起,它将起作用。但我认为这是一种不好的做法。尝试let测试;等待权限。检查('photo')。然后((响应)=>test=response)代码>我以前问过类似的问题,在接受的答案中有一个非常有用的信息:这是评论还是回答?@KhalilKhalaf,不,OP从未说过第一个解决方案不起作用。他们只是希望异步函数test
能够提供更好的(一种“同步”)方式来访问结果
对象。我解释说,test
不会返回这个结果
对象,而是一个包装这个对象的承诺。