Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 调用异步函数返回属性名为数字的承诺对象_Javascript_React Native_Es6 Promise - Fatal编程技术网

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()
    where
    Permissions.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
    不会返回这个
    结果
    对象,而是一个包装这个对象的承诺。