首页 > 解决方案 > TypeError:试图分配给 FBGraphRequestManager 中的只读属性

问题描述

我已将 Facebook 登录集成到我的 react 本机应用程序中。成功登录后,我正在使用GraphRequest获取用户配置文件。但是,我间歇性地看到以下错误,我不确定它为什么会发生? 在此处输入图像描述

下面是我的代码FacebookService.js

import React from 'react'
import FBSDK from 'react-native-fbsdk'

const {
  LoginManager,
  AccessToken,
  GraphRequest,
  GraphRequestManager,
} = FBSDK;
class FacebookService {
    constructor() {
        this.requestManager = new GraphRequestManager()
    }

    loginToFacebook(callback)
    {
        LoginManager.logInWithPermissions(['email','public_profile',/*'user_friends'*/]).then(
            function(result) {
                if (result.isCancelled) {
                    alert('Login was cancelled');
                } else {
                    console.log(result)
                    alert('Login was successful with permissions: '
                    + result.grantedPermissions.toString());
                    AccessToken.getCurrentAccessToken().then(
                        (data) => {
                            //console.log(data);
                            callback(data.accessToken)
                            //alert(data.accessToken.toString())
                        }
                    )
                }
            },
            function(error) {
                //callback(error)
                alert('Login failed with error: ' + error);
            }
        );
    }

    logout()
    {
        LoginManager.logOut()
    }
    async fetchProfile() {
        return new Promise((resolve, reject) => {
        const request = new GraphRequest(
            '/me',
            null,
            (error, result) => {
                if (result) {
                    const profile = result
                    profile.avatar = `https://graph.facebook.com/${result.id}/picture?type=large`
                    resolve(profile)
                } else {
                    reject(error)
                }
            }
        )

        this.requestManager.addRequest(request).start()
        })
    }
}

export const facebookService = new FacebookService()

正如我上面提到的,这个问题是间歇性发生的,所以我真的不知道发生了什么。

标签: javascriptfacebookreact-nativefacebook-graph-api

解决方案


我能够通过this.requestManager = new GraphRequestManager()从构造函数中删除新实例并将其直接添加到 requestGraph 中来解决这个问题,如下所示:

async fetchProfile(callback) {

    return new Promise((resolve, reject) => {
      const request = new GraphRequest(
        '/me',
        { 
          parameters: {fields: { string: 'picture.width(400),name' }}
        },
        (error, result) => {
          if (result) {
            const profile = result
            //profile.avatar = `https://graph.facebook.com/${result.id}/picture?&height=400&width=400`;
            resolve(profile)
          } else {
            reject(error)
          }
        }
      )

      new GraphRequestManager().addRequest(request).start()
    })
  }

让我知道这是否也可以为您解决。干杯! 我可能会尝试使用反应组件并在 ComponentDidMount 中初始化 GraphRequestManager。


推荐阅读