.then() javascript не работает

Я пытаюсь войти с помощью веб-SDK Skype. Я взял код для входа из некоторых руководств. Вот код:

$('#signin').click(function () {
        $('#signin').hide();
        log('Signing in...');
        //debugger;
        // and invoke its asynchronous "signIn" method
        client.signInManager.signIn({
            username: '[email protected]',
            password: 'sdfafa2'
        }).then(function () {
            //log in worked!
            alert('Signed in');
            $('#loginbox').hide();
            $('#chatfunctions').show();
        }, function (error) {
            //Something went wrong.
            alert(error);
        });
});

Моя проблема в том, что первая функция в then не работает. Если я укажу недопустимое имя пользователя, он покажет мне сообщение об ошибке, но никогда не покажет предупреждение «Вход в систему», даже если я предоставлю правильные учетные данные.


person Rida Iftikhar    schedule 02.08.2016    source источник
comment
Для меня ваш код говорит "ReferenceError: $ is not defined"   -  person Justinas    schedule 02.08.2016
comment
Вы тестировали код с помощью JQuery @Justinas?   -  person Error404    schedule 02.08.2016
comment
@ Error404, вы должны указать свой комментарий на OP, который задал этот вопрос.   -  person Jai    schedule 02.08.2016
comment
@ Error404 Если пример OP не работает, я предполагаю, что ему не хватает библиотеки jQuery, включенной в проект.   -  person Justinas    schedule 02.08.2016
comment
Я не понимаю, в чем заключается неожиданность Если я укажу недопустимое имя пользователя, мне будет показано сообщение об ошибке, но никогда не будет показано предупреждение о входе в систему. Во-первых, как бы вы вошли в систему с недопустимым именем пользователя, а во-вторых, весь смысл then в том, что он либо вызывает первый обратный вызов (в случае успеха) или второй обратный вызов (в случае неудачи), и никогда оба.   -  person Bergi    schedule 02.08.2016
comment
@Justinas Я проверил код с помощью JQuery, и все остальное работает нормально, код просто не будет работать в этой конкретной функции с предупреждением о входе в систему. Кстати я "она", а не "он"   -  person Rida Iftikhar    schedule 02.08.2016
comment
Недопустимое имя пользователя @Bergi означает, что если я напишу «ridaiftikhar.com» вместо «[email protected]», он перейдет ко второму обратному вызову. Но если я даю имя пользователя с правильным доменом и всем остальным, оно не переходит ни к одному из обратных вызовов.   -  person Rida Iftikhar    schedule 02.08.2016


Ответы (3)


Из вашего фрагмента кода я вижу, что вы используете учетную запись Hotmail для входа. Код входа, который вы пытаетесь выполнить, относится к Skype Web SDK, предназначенному для Skype для бизнеса (а не для пользователей Skype). Для входа используйте действующую учетную запись Skype для бизнеса. Еще одно замечание: если вы используете аутентификацию на основе имени пользователя и пароля, ваша организация, в которой развернуто приложение Skype для бизнеса, должна поддерживать аутентификацию на основе имени пользователя и пароля. В противном случае вход невозможен.

person Sid - Microsoft    schedule 02.08.2016

Что ж, похоже client.signInManager.signIn возвращает Promise, и в настоящее время браузеры изначально не поддерживают обещания, хотя вы можете использовать promise polyfill, чтобы это работало.

person Harekam Singh    schedule 02.08.2016
comment
я попытался использовать тег ‹script src=promisejs.org /polyfills/promise-7.0.4.min.js›‹/› в моем html-файле, но он все равно не будет работать. - person Rida Iftikhar; 02.08.2016
comment
вам нужно использовать babel или какой-либо другой транспилятор, чтобы он работал - person Harekam Singh; 02.08.2016
comment
Если браузеры изначально не поддерживают промисы, то почему вызывается второй обратный вызов? Тогда мой код тоже не должен работать в случае ошибки, но работает - person Rida Iftikhar; 02.08.2016

Когда заданы только параметры username и password, SDK пытается обнаружить URL-адрес соответствующего сервера для этого пользователя, переходя к lyncdiscover.hotmail.com и lyncdiscoverinternal.hotmail.com (поскольку задано имя пользователя @hotmail.com). Поскольку ни один из доменов не существует, SDK не получает ответа и никогда не разрешает/отклоняет возвращенный объект обещания. Как сказал Сид, для входа необходимо правильное имя пользователя S4B.

SDK возвращает объект промиса, но это не родной промис — у SDK есть собственный полифилл.

person antonkh    schedule 09.08.2016
comment
Спасибо, но поскольку ваш ответ немного запоздал, я уже нашел это (трудным путем). Но еще раз спасибо :) - person Rida Iftikhar; 10.08.2016