从另一个函数中的promise内部返回一个值[重复]

Posted

技术标签:

【中文标题】从另一个函数中的promise内部返回一个值[重复]【英文标题】:Returning a value from inside a promise which is in another function [duplicate] 【发布时间】:2018-08-09 08:28:32 【问题描述】:

我正在尝试从 firebase 中的 getUserRecordFromAuth 函数内部返回 userRecord,并使用它从 Firebase 中的身份验证中获取用户的 UID

问题是 userRecord.uid 总是返回undefined,即使我在getUserRecordFromAuth() 中返回了promise 的值。什么给了?

const getUserData = mobile => 
    const userRecord = getUserRecordFromAuth(mobile);

    console.log('uid', userRecord.uid);


const getUserRecordFromAuth = mobile => 

    const promise = auth.getUserByPhoneNumber(mobile);

    return promise.then(userRecord => 
        return userRecord;
    ).catch(error => 
        console.log(error);
    );

【问题讨论】:

getUserRecordFromAuth(...).then(....) 你不是在“返回承诺的价值”(这是不可能的,因为它只会在未来可用),而是你在返回承诺本身。 为了以更命令式的方式实现相同的结果,类似于您的代码,您还可以使用asyc - await 抽象与承诺返回异步函数。 @Bergi 关于价值返回承诺的任何建议,我可以检查。与 async/await.. 有什么区别? 【参考方案1】:

当您返回一个 Promise 以获得您需要使用的结果时,请使用 .then()

const getUserData = mobile => 
    getUserRecordFromAuth(mobile)
     .then((userRecord) => console.log('uid', userRecord.uid));

【讨论】:

如果我想从 getUserData 返回 userRecord 怎么办?在 then() 方法中获取值只会使我的 userRecord 保持在有限的范围内。如何返回整个 userRecord?

以上是关于从另一个函数中的promise内部返回一个值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]

在异步函数内部,从回调函数返回值返回 Promise(undefined) [重复]

ES6+--》熟知JS中的async函数

如何将promise的返回值推送到数组中? [重复]

为啥 async/await Axios 请求不会返回 Data 而不是 Promise 对象 [重复]

将函数的进度输出到执行 Promise 内部的控制台 [重复]