Асинхронные вызовы API-интерфейса YouTube вызывают player.getDuration не является ошибкой функции - PullRequest
0 голосов
/ 01 декабря 2018

Я получаю ошибку типа при использовании Youtube IFrame api с Knockout JS.Видео загружается на ftl, но player.getDuration () вызывает ошибку из-за асинхронных вызовов до полной инициализации объекта player.Кто-нибудь имеет какие-либо идеи о том, как решить эту проблему в Knockout JS?

Я пытался с помощью метода обратного вызова, затем и сделали методы, но не повезло в Knockout JS.

Сведения об ошибке:

Uncaught TypeError: player.getDuration is not a function
    at Object.getTotalDuration (youtube-player-module.require.js:28)
    at list-view-module.require.js:102
    at Object.onYouTubeIframeAPIReady (youtube-player-module.require.js:24)
    at ViewModel.self.submitform(list-view-module.require.js:101)
    at Modal.eval (eval at parseBindingsString (knockout-latest.js:68), <anonymous>:3:96)
    at HTMLInputElement.<anonymous> (knockout-latest.js:89)
    at HTMLInputElement.dispatch (jquery.js:5183)
    at HTMLInputElement.elemData.handle (jquery.js:4991)

list-view-module.require.js

youtubeplayermodule.onYouTubeIframeAPIReady(vid,function () 
{ 
var duration= youtubeplayermodule.getTotalDuration(); 
});

youtube-player-module.require.js

let player = ko.observable();

function onYouTubeIframeAPIReady(vid, doneCallBack) {
    player =  new YT.Player('video-placeholder', {
        videoId: vid,
        events: {
            'onReady': initialize
        }
    });
    doneCallBack();
}

function getTotalDuration() {
    return player.getDuration();
}

function initialize(){
    alert('initiaze');
}
...