簡單的承諾
儘管本文檔的目的不是教您如何編寫JavaScript Promise,了解如何使用它們,看看如何簡單Promise被編碼。
在下面,Promise將創建一個返回字符串,該字符串指出任務是否已完成。關鍵是Promise.resolve()要么Promise.reject()方法被調用。在這種情況下,兩個方法都傳遞了一個簡單的字符串,但這可能是一個對象。
let promiseToFinishTask = new Promise(function(resolve, reject) {
//Business logic to set taskComplete boolean
let taskComplete = true;
if (taskComplete) {
resolve('Yea, I am done');
} else {
reject('Not quite done');
}
});
現在您將看到如何處理退貨Promise信息,這是您對某些Brightcove Player API方法調用所做的操作。基本的處理如下:
promiseName.then(
// Function call for promise resolved
).catch(
// Function call for promise rejected
)
處理上面的簡單示例如下所示:
promiseToFinishTask.then(function(fromResolve) {
console.log(fromResolve);
}).catch(function(fromReject) {
console.log(fromReject);
});
如果Promise解決了then代碼已執行,如果Promise被拒絕了catch代碼被執行。例如,字符串之一Yea, I am done要么Not quite done將根據設置taskComplete變量的值。
Brightcove的例子
Brightcove玩家的play()方法可能會返回一個Promise,可用於檢查播放器是否可以自動播放播放器中當前的視頻。處理Promise突出顯示:
var myPlayer = videojs.getPlayer('myPlayerID');
myPlayer.on('loadedmetadata',function() {
var promise = myPlayer.play();
if (promise !== undefined) {
promise.then(function() {
// Autoplay started!
}).catch(function(error) {
// Autoplay was prevented.
});
}
});
基於此,您可以然後編碼是否自動播放視頻的行為。有關播放視頻和音頻的特定用例,請參見具體用例的部分自動播放注意事項文件。
有關JavaScript承諾的完整信息,請參見MDN承諾文件。
Promise與回調
在本節中,目錄的get()方法用於演示使用Promise與回調函數。的get()方法可以與任何一種方法一起使用。
無極語法
以下是顯示對的調用的代碼段get()方法,將響應作為Promise:
myPlayer.catalog.get(catalogParams).then(function(videosReturned){
console.log('videosReturned',videosReturned);
myPlayer.playlist(videosReturned);
}).catch(function(errorObj){
console.log('errorObj',errorObj);
});
回調函數語法
以下是顯示對的調用的代碼段get()方法,使用回調函數處理響應:
myPlayer.catalog.get(catalogParams,function(errorObj,videosReturned){
console.log('errorObj',errorObj);
console.log('videosReturned',videosReturned);
myPlayer.playlist(videosReturned);
});