Playfab - ReferenceError: «Обещание» не определено - PullRequest
1 голос
/ 22 апреля 2019

Я создаю новый небольшой проект в таблицах Google, чтобы получить некоторые данные с серверов Playfab для игры в Kongregate. Playfab предоставляет Javascript API для работы:

https://download.playfab.com/PlayFabClientApi.js

Я буду использовать функцию

Но когда я пытаюсь запустить свой первый тест, я получаю сообщение об ошибке:

ReferenceError: "Promise" no está definido. (línea 33, archivo "Código")

После некоторых исследований я понял, что Promise не поддерживается GAS (Google Apps Script), но где-то, где я читал V8, можно использовать обещания ... Я немного растерялся, не могли бы вы немного помочь мне с этой работой?

Мой код в моем проекте:

// Load JavaScript from External Server
var url = "https://download.playfab.com/PlayFabClientApi.js";
var javascript = UrlFetchApp.fetch(url).getContentText();
var token = "1111111111111111111111111111111111111111111111111111111111111111";
var kongID = "1111111";
eval(javascript);
/* ######################################################################## */
/* ######################## MENU FUNCTION ################################# */
/* ######################################################################## */
function onOpen(){
  var menu = SpreadsheetApp.getUi().createMenu('PLAYFAB MENU');

  menu.addItem('FirstCallPlayfab', 'PlayFabAPICall')
  .addToUi(); 
}

function PlayFabAPICall() {
  PlayFab.settings.titleId = "E3FA";
  var loginRequest = {
    // Currently, you need to look up the correct format for this object in the API-docs:
    // https://api.playfab.com/documentation/Client/method/LoginWithCustomID
    TitleId: PlayFab.settings.titleId,
    AuthTicket: token,
    CreateAccount: false,
    KongregateId: kongID,
  };

  PlayFabClientSDK.LoginWithKongregate(loginRequest, LoginCallback);
}

var LoginCallback = function (result, error) {
  if (result !== null) {
    Logger.log("Congratulations, you made your first successful API call!");
  }
  else if (error !== null) {
    Logger.log("Something went wrong with your first API call.\n" +
    "Here's some debug information:\n" +
    PlayFab.GenerateErrorReport(error));
  }
}

Функция LoginWithKongregate в файле API:

LoginWithKongregate: function (request, callback, customData, extraHeaders) {
    request.TitleId = PlayFab.settings.titleId ? PlayFab.settings.titleId : request.TitleId; if (!request.TitleId) throw PlayFab._internalSettings.errorTitleId;
    // PlayFab._internalSettings.authenticationContext can be modified by other asynchronous login attempts
    // Deep-copy the authenticationContext here to safely update it
    var authenticationContext = JSON.parse(JSON.stringify(PlayFab._internalSettings.authenticationContext));
    var overloadCallback = function (result, error) {
        if (result != null) {
            if(result.data.SessionTicket != null) {
                PlayFab._internalSettings.sessionTicket = result.data.SessionTicket;
            }
            if (result.data.EntityToken != null) {
                PlayFab._internalSettings.entityToken = result.data.EntityToken.EntityToken;
            }
            // Apply the updates for the AuthenticationContext returned to the client
            authenticationContext = PlayFab._internalSettings.UpdateAuthenticationContext(authenticationContext, result);
            PlayFab.ClientApi._MultiStepClientLogin(result.data.SettingsForUser.NeedsAttribution);
        }
        if (callback != null && typeof (callback) === "function")
            callback(result, error);
    };
    PlayFab._internalSettings.ExecuteRequestWrapper("/Client/LoginWithKongregate", request, null, overloadCallback, customData, extraHeaders);
    // Return a Promise so that multiple asynchronous calls to this method can be handled simultaneously with Promise.all()
    return new Promise(function(resolve){resolve(authenticationContext);});
},

1 Ответ

1 голос
/ 23 апреля 2019

Если мое понимание верно, как насчет этого примера сценария? К сожалению, на данном этапе «Обещание» пока нельзя использовать в скрипте Google Apps на стороне сервера. В качестве текущего обходного пути я предлагаю использовать пользовательский диалог и боковую панель. В этом примере сценария используется пользовательский диалог. Ход этого сценария выглядит следующим образом. Пожалуйста, подумайте об этом как об одном из нескольких ответов.

  1. Открыть электронную таблицу.
  2. Запустите скрипт openDialog() из пользовательского меню.
  3. Открыть диалоговое окно и index.html запускается.
    • В этом случае в вашем браузере запускается index.html.

Пример сценария:

Пожалуйста, скопируйте и вставьте следующий скрипт в редактор скриптов. Code.gs и index.html - это скрипт и html соответственно.

Code.gs: Google Apps Script

function onOpen(){
  var menu = SpreadsheetApp.getUi().createMenu('PLAYFAB MENU');
  menu.addItem('FirstCallPlayfab', 'openDialog').addToUi(); 
}

function openDialog() {
  var html = HtmlService.createHtmlOutputFromFile("index.html");
  SpreadsheetApp.getUi().showModalDialog(html, 'sample');
}

index.html: HTML и Javascript

<script src="https://download.playfab.com/PlayFabClientApi.js"></script>
<script>
  function PlayFabAPICall() {
    PlayFab.settings.titleId = "E3FA";
    var loginRequest = {
      // Currently, you need to look up the correct format for this object in the API-docs:
      // https://api.playfab.com/documentation/Client/method/LoginWithCustomID
      TitleId: PlayFab.settings.titleId,
      AuthTicket: token,
      CreateAccount: false,
      KongregateId: kongID,
    };

    PlayFabClientSDK.LoginWithKongregate(loginRequest, LoginCallback);
  }

  var LoginCallback = function (result, error) {
    if (result !== null) {
      console.log("Congratulations, you made your first successful API call!");
    }
    else if (error !== null) {
      console.log("Something went wrong with your first API call.\n" +
      "Here's some debug information:\n" +
      PlayFab.GenerateErrorReport(error));
    }
  }

  PlayFabAPICall();
</script>

Примечание:

  • Перед запуском скрипта, пожалуйста, установите AuthTicket: token, и KongregateId: kongID.

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...