TypeScript:返回一个承诺的结果

     2023-03-13     125

关键词:

【中文标题】TypeScript:返回一个承诺的结果【英文标题】:TypeScript: Return Result of a Promise 【发布时间】:2017-09-10 19:07:07 【问题描述】:

我正在开发一个使用 Fireface Login 和 Facebook 的 Ionic 应用程序。为此,我在这里关注了文档:https://github.com/angular/angularfire2/blob/master/docs/Auth-with-Ionic2.md

几乎在文档的末尾,您可以看到进行 FB 登录的一段代码(如果可用,请使用本机 FB 应用程序):

  signInWithFacebook(): firebase.Promise<FirebaseAuthState> 
    if (this.platform.is('cordova')) 
      return Facebook.login(['email', 'public_profile']).then(res => 
        const facebookCredential = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken);
        return firebase.auth().signInWithCredential(facebookCredential);
      );
     else 
      ...
    
  

这种搞砸了方法signInWithFacebook的返回类型。实际上,该方法应该返回由 Facebook.login(...) 触发的 Promise 的结果——但它确实返回了具有不同数据类型的 FacebookLogin-Promise 本身。 我有点困惑如何重新建模这些行以正确返回由 firebase.auth().signInWithCredential(facebookCredential) 创建的 Promise。

你有什么提示/想法吗?

提前非常感谢!

【问题讨论】:

没有使用过标志性的库,所以不知道你到底在引用什么。你能更详细地解释一下“。实际上方法应该返回” signInWithFacebook 的返回类型是 firebase.Promise。但是 Facebook.login() 的返回类型是 Promise - 这是不兼容的。但是 Facebook.login() 的已解决 Promise 的结果将适合 signInWithFacebook 的方法定义。我尝试做的是返回已解决的 Promise(由 Facebook.login() 创建)的结果,而不是 Promise 本身。 return firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken).then((facebookCredential)=&gt;firebase.auth().signInWithCredential(facebookCredential)); 呢? 我如何获得 res.authRespon‌​se.accessToken?这是我在您的建议中找不到的“外部”承诺(通过 Facebook-login())结果的一部分 【参考方案1】:

好的,这里有一个解决方案(或变通方法——随便你怎么称呼它)。

我改变了什么:

signInWithFacebook 方法确实返回 void 它采用匿名函数作为参数,当内部 Promise 解析时执行

代码如下:

  signInWithFacebook(success: (FirebaseAuthState) => void): void 
    if (this.platform.is('cordova')) 
      Facebook.login(['email', 'public_profile']).then(res =>
        
          const facebookCredential = firebase.auth.FacebookAuthProvider.credential(res.authResponse.accessToken);
          firebase.auth().signInWithCredential(facebookCredential).then( fbas => success(fbas));
        
      );
    
    else 
      this.auth$.login(
          provider: AuthProviders.Facebook,
          method: AuthMethods.Popup
        ).then(res => success(res));
    
  

这是调用方法的方法:

this._auth.signInWithFacebook2(res => ...);

【讨论】:

Typescript/Angular - 模态结果返回后调用单独的函数

】Typescript/Angular-模态结果返回后调用单独的函数【英文标题】:Typescript/Angular-Callseparatefunctionaftermodalresultreturn【发布时间】:2017-03-1819:16:29【问题描述】:当我通过关闭或取消Angular/Typescript中的模式返回我的承诺时,我在调用... 查看详情

带有承诺返回错误的 Typescript onPress

】带有承诺返回错误的TypescriptonPress【英文标题】:TypescriptonPressWithPromiseReturnedError【发布时间】:2020-04-3012:20:24【问题描述】:我第一次在我的项目中实现typescript,我遇到了来自onPress的错误,它调用了toggleModal。错误来自onPress... 查看详情

为啥 Typescript 认为 async/await 返回包装在承诺中的值?

】为啥Typescript认为async/await返回包装在承诺中的值?【英文标题】:WhydoesTypescriptthinkasync/awaitreturnsavaluewrappedinapromise?为什么Typescript认为async/await返回包装在承诺中的值?【发布时间】:2018-03-2915:07:14【问题描述】:我想将一个Pr... 查看详情

如何阻止 javascript 承诺并返回已解决的结果? [复制]

】如何阻止javascript承诺并返回已解决的结果?[复制]【英文标题】:Howtoblockforajavascriptpromiseandreturntheresolvedresult?[duplicate]【发布时间】:2015-06-0901:00:31【问题描述】:我显然误解了js承诺的解决方式或“返回”的语义。我被一个... 查看详情

如何在承诺中返回修改后的结果作为承诺

】如何在承诺中返回修改后的结果作为承诺【英文标题】:Howtoreturnamodifiedresultinapromiseasapromise【发布时间】:2018-06-1410:51:46【问题描述】:我正在使用带有Alamofire扩展的promiseKit6。在下面的函数中,我希望返回Promise&lt;JSON&... 查看详情

firebase 交易,您必须返回一个承诺

...2019-03-0415:01:06【问题描述】:我试图弄清楚如何从Angular6/typescript应用程序将事务写入firebase数据库。我用作指导的一个工作示例如下:consttransactions=[];returndb.runTransaction(function(t 查看详情

从函数返回承诺

...ise链的理解很浅。说,我有一个如下所示的方法。它是用TypeScript编写的,但可以修改以匹配JavaScriptES6privateInsertPersonInDB(p:Person)returnthis.db.find(//<- 查看详情

如何监视调用另一个返回承诺的服务的服务函数 - 打字稿

...:Howtospyonaservicefunctionthatcallsanotherservicewhichreturnsapromise-typescript【发布时间】:2016-05-0207:47:36【问题描述】:家长服务:moduleproj.StuffexportclassParentService//...properties,constructor,et 查看详情

将承诺的结果链接并传递给进一步的承诺[重复]

...布时间】:2017-11-2808:16:02【问题描述】:我正在链接一些返回承诺的请求。第一个是对某个站点的登录检查,该站点返回一些凭据。然后我打了一个admin.auth().createUser()电话。在我知道这个createUser调用 查看详情

异步减少返回的承诺

】异步减少返回的承诺【英文标题】:Asyncreducereturningpromises【发布时间】:2019-12-2109:22:51【问题描述】:我有一个对象数组,我必须为来自异步函数的每个对象添加一个属性我正在做一个Array.reduce来迭代每个元素并只返回一个... 查看详情

节点承诺和返回值(代码片段)

...理解。我知道下面的示例将无法正常工作,“someStuff”将返回一个空数组。我也相信我明白这是因为“doPromise”没有阻塞,所以循环完成并在“doPromise”解决之前返回一个空数组。我不明白的是我如何以适当的方式完成此示例中... 查看详情

如何按顺序执行承诺并返回所有结果[重复]

】如何按顺序执行承诺并返回所有结果[重复]【英文标题】:Howtoexecutepromisesinorderandreturnallresults[duplicate]【发布时间】:2019-10-1107:30:01【问题描述】:我不熟悉承诺。我已经按顺序查找了执行Promise的示例,但没有找到与我的应用... 查看详情

如何在返回其回调之一结果的函数的 Typescript 中声明类型?

】如何在返回其回调之一结果的函数的Typescript中声明类型?【英文标题】:HowdoIdeclaretypingsinTypescriptofafunctionwhichreturnsaresultofoneofitscallbacks?【发布时间】:2021-08-0818:38:44【问题描述】:我有一个mapResponse函数,它接受另一个函数... 查看详情

承诺解决后打字稿返回布尔值

】承诺解决后打字稿返回布尔值【英文标题】:Typescriptreturningbooleanafterpromiseresolved【发布时间】:2018-01-2115:38:09【问题描述】:我试图在promise解决后返回一个布尔值,但typescript给出错误提示A\'get\'accessormustreturnavalue.我的代码看... 查看详情

关于用 Angular 和 typescript 链接 $q 承诺的困惑

】关于用Angular和typescript链接$q承诺的困惑【英文标题】:confusionaboutchaining$qpromiseswithangularandtypescript【发布时间】:2016-08-2201:29:06【问题描述】:我对Q、promises、angular和typescript非常缺乏经验-所以显然明智的选择是尝试将它们全... 查看详情

如何声明 Rx.Observable.fromPromise() 的 TypeScript 返回类型

】如何声明Rx.Observable.fromPromise()的TypeScript返回类型【英文标题】:HowtodeclareTypeScriptreturntypeofRx.Observable.fromPromise()【发布时间】:2017-06-2000:02:18【问题描述】:我有一个函数返回一个从承诺创建的Rx.Observable,如下所示:vardata$=fet... 查看详情

Node.js / Javascript 多重递归承诺在视图中返回

】Node.js/Javascript多重递归承诺在视图中返回【英文标题】:Node.js/Javascriptmultiplerecursivepromisetoreturnatview【发布时间】:2019-12-1908:32:13【问题描述】:我目前有一个包含多个递归调用的算法,我希望每个人都返回该算法以巩固我的... 查看详情

你能“累积”承诺结果形成一连串“那么”吗? [复制]

...布时间】:2014-10-1509:59:19【问题描述】:假设您必须链接返回承诺的函数,其中每个函数都需要一些(不一定是最后一个)其他承诺返回的值。这个模式有名字吗,用promises干净可行吗?例如:ret 查看详情