Получение обещания неопределенной ошибки, когда я использую Promise в своем приложении Word Addin

Я разрабатываю надстройку Word (Word API + Office.js), я пытаюсь реализовать метод как обещание, но получаю сообщение об ошибке: обещание не определено

Это ссылка, которую я использую

<script src="https://code.jquery.com/jquery-2.1.4.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
<script src="Scripts/jquery-1.9.1.js" type="text/javascript"></script>
<script src="Scripts/FabricUI/MessageBanner.js" type="text/javascript"></script>
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>

Это метод, в котором я пытаюсь вернуть обещание

function getBase64(file, onLoadCallback) {
    return new Promise(function (resolve, reject) {
        var reader = new FileReader();
        reader.onload = function () { resolve(reader.result); };
        reader.onerror = reject;
        reader.readAsDataURL(file);
    });
}

я попытался создать пример метода обещания из веб-учебника в моем проекте надстройки, даже если я получаю ту же ошибку. пожалуйста, дайте мне знать, поддерживаются ли обещания в надстройке Word !! или если я что-то пропустил


person Common_Coder    schedule 28.02.2020    source источник
comment
Я думаю, что одной единственной версии jQuery должно быть достаточно, и вы ничего не делаете с обратным вызовом onLoadCallback. В какой строке вы получаете ошибку?   -  person Alon Eitan    schedule 28.02.2020
comment
@AlonEitan я устал с одной версией, но все же получаю ту же ошибку, я получаю сообщение об ошибке при возврате новой строки обещания, поскольку обещание не определено   -  person Common_Coder    schedule 28.02.2020
comment
@Common_Coder Где работает этот код, в Office или в вашем браузере? А какой у вас браузер кстати? Обещание недоступно в IE11 и требует полифилла.   -  person GBWDev    schedule 28.02.2020
comment
@GBWDev Я разрабатываю веб-надстройку Word, используя ее в Office 365.   -  person Common_Coder    schedule 28.02.2020
comment
@Common_Coder, какой браузер ты используешь?   -  person GBWDev    schedule 28.02.2020
comment
добавьте это перед вашим jquery <script src="https://cdnjs.cloudflare.com/ajax/libs/bluebird/3.3.4/bluebird.min.js"></script> , тогда это сработает?   -  person GBWDev    schedule 28.02.2020
comment
Другой вариант — использовать вместо этого API обещаний jQueries.   -  person GBWDev    schedule 28.02.2020
comment
Используйте эту статью, чтобы определить, работает ли ваша надстройка в IE. Браузеры, используемые веб-надстройками Office. IE не поддерживает промисы. Исправление состоит в том, чтобы запускать этот код в начале любого файла JavaScript, использующего промисы: if (!window.Promise) { window.Promise = Office.Promise; }   -  person Rick Kirkham    schedule 29.02.2020


Ответы (2)


Эта ошибка означает, что ваша надстройка работает в IE, который изначально не поддерживает Promises. В Office есть полифилл Promises, который вы можете использовать. Просто добавьте этот код в начало файла JavaScript: if (!window.Promise) { window.Promise = Office.Promise; }

person Starlord    schedule 04.03.2020

Ниже приведен способ создания функции как обещания и вызова функции.

пример кода о том, как работает обещание и как его можно вызвать, объект обещания можно вызвать только путем вызова метода then и передачи функций обратного вызова разрешения и отклонения.

function callPromise() {

  return new Promise(function(resolve, reject) {
  // do a thing, possibly async, then…

  if (true) {
    resolve("Stuff worked!");
  }
  else {
    reject(Error("It broke"));
  }
});

}

callPromise().then(function(success){
   console.log(success);
}, function(error)
{
  console.log(error);
})



function getBase64(file, onLoadCallback) {
    return new Promise(function (resolve, reject) {
        var reader = new FileReader();
        reader.onload = function () { resolve(reader.result); };
        reader.onerror = reject;
        reader.readAsDataURL(file);
    });
}

getBase64('file', function(){}).then(function(result)
{
   console.log(result);
},
function(error)
{
   console.log(error);
})
person Faiz Mohammed    schedule 28.02.2020
comment
я устал от того же кода, который вы дали, но все равно получаю ту же ошибку, что и Promise undefined - person Common_Coder; 28.02.2020
comment
Вы пробовали мой пример кода, приведенный чуть выше функции getBase64? он должен работать. - person Faiz Mohammed; 28.02.2020