当前位置: 首页 > 知识库问答 >
问题:

如何从异步等待函数返回值?[副本]

齐承泽
2023-03-14

我想返回用户的电话号码,但我得到的是[对象对象]。我在想,如果它在等待完成之前返回值。这是我的代码。

//assume phone number is 12345678

async function user_attr() {
    try{
    const { attributes } = await Auth.currentAuthenticatedUser();
    console.log(JSON.stringify(attributes.phone_number)); //output:12345678
    return (JSON.stringify((attributes.phone_number)))
    } catch (e) {
        console.log(e);
    }
}

console.log('return='+user_attr()) //output: return=[object Object]

console.log('return='+JSON.stringify(user_attr())) //output: return={"_U":0,"_V":0,"_W":null,"_X":null}

输出12345678,以便我可以在异步函数外部访问它。例如,要在个人资料页面中显示它,

有什么方法可以将电话号码字符串保存到一个外部异步常量函数中?


共有3个答案

司马庆
2023-03-14
async function user_attr() {
    try {
        const { attributes } = await Auth.currentAuthenticatedUser();
        //It is similar to "return new Promise(function (resolve) { resolve(attributes.phone_number) });"
        return attributes.phone_number;
    } catch (error) {
        console.log(error);
    }

}

//then((phone_number) => console.log("return=" + phone_number))

user_attr().then(function (phone_number) {
    console.log("return=" + phone_number);
})

//or async await

async function log_user_attr_phone_number() {
    const phone_number = await user_attr();
    console.log("return=" + phone_number);
}

log_user_attr_phone_number();

异步功能文档

颛孙英才
2023-03-14

你正在回报一个promise,因此你需要这样做

  const checkFunction = async() => {
const promiseRes = await user_attr()
    
    console.log('return='+promiseRes ) 
    
    console.log('return='+JSON.stringify(promiseRes)) //output: ret
    }

希望有帮助

王渊
2023-03-14

您还需要等待调用函数。异步函数总是返回等待所需的Promise。

async function getPhoneNumber() {
  const phone = await user_attr();

  console.log('return='+phone)
}

getPhoneNumber();
 类似资料:
  • 我有一个windows服务,我从另一个开发人员继承,它运行非常慢,并有许多对eBay API的缓慢调用。我希望在没有太多重构的情况下加快它。 我刚刚开始研究使用C#Async/Await来尝试让这些缓慢的调用运行异步。以下是我试图实现的目标: 如何获取返回的类型以便使用它们?我尝试使用,但它只有属性可用。

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 问题内容: 如何从异步函数返回值?我试图喜欢这个 它给了我, 问题答案: 您不能超出范围。为了获得预期的结果,您应该将其包装到异步IIFE中,即 样品。 有关更多信息 由于返回一个Promise,因此可以将其省略,如下所示: 然后像以前一样做

  • 问题内容: 我的代码在javascript中看起来像这样: 在完成所有这些异步调用之后,我想计算所有数组的最小值。 我要如何等待所有人? 我现在唯一的想法是拥有一个名为done的布尔数组,并在第i个回调函数中将done [i]设置为true,然后说while(不是全部都完成了){} 编辑:我想一个可能但很丑陋的解决方案是在每个回调中编辑完了的数组,然后如果每个回调中都设置了所有其他完成,则调用一个

  • 问题内容: 在SO中多次问过这个问题。但是我还是收不到东西。 我想从回调中获得一些价值。请看下面的脚本进行澄清。 如果我尝试返回该值,则只是“未定义”。我遵循了SO的一些想法,但仍然失败。 那些是: 问题答案: 这是不可能的,因为您无法从同步方法内部的异步调用返回。 在这种情况下,您需要将回调传递给foo,该回调将接收返回值 问题是,如果内部函数调用是异步的,则所有“包装”此调用的函数也必须是异步

  • 我用webpack建立了一个浏览器umd库。 我正在侦听输入文件的onchange事件。当有人提交图像/文件时,它会将其转换为base64。我试图让它尽可能看起来不那么明显,所以我使用了promises和wait/asynchttps://blog.shovonhasan.com/using-promises-with-filereader/. 但是,有一个问题-当我调用convertToBase