Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将updateend事件侦听器添加到两个对象?_Javascript_Addeventlistener - Fatal编程技术网

Javascript 如何将updateend事件侦听器添加到两个对象?

Javascript 如何将updateend事件侦听器添加到两个对象?,javascript,addeventlistener,Javascript,Addeventlistener,我的代码(不是完整的脚本,而是问题的必要部分): 我正在使用媒体源扩展API创建一个视频播放器。我已经创建了两个名为视频和音频的源缓冲区。在上面的小代码中,我向视频和音频位置发送了两个请求,并将请求附加到链接到视频播放器的video和audio。我在视频缓冲区中添加了一个事件列表器。更新视频缓冲区后,事件侦听器将打开函数追加新的源()。我想在两个缓冲区(音频和视频)上同时添加一个updateend。因此,在视频和音频完成更新后,应该会打开函数appending_new_sources()。我不知

我的代码(不是完整的脚本,而是问题的必要部分):


我正在使用媒体源扩展API创建一个视频播放器。我已经创建了两个名为
视频
音频
源缓冲区。在上面的小代码中,我向视频和音频位置发送了两个请求,并将请求附加到链接到视频播放器的
video
audio
。我在
视频
缓冲区中添加了一个
事件列表器
。更新
视频
缓冲区后,事件侦听器将打开函数
追加新的源()。我想在两个缓冲区(音频和视频)上同时添加一个
updateend
。因此,在视频和音频完成更新后,应该会打开函数
appending_new_sources()
。我不知道怎么做。请帮忙

使用一个公共处理程序并记住您收到了多少次回调;当您有两个源时,请调用添加新源的

var callbacks = 0;
function handler() {
    if (++callbacks == 2) {
        appending_new_sources();
    }
}

request_xhr (video_url, function (buffer)
{
  video.addEventListener('updateend', handler);
  video.appendBuffer(buffer);
});

request_xhr (audio_url, function (buffer)
{
  audio.addEventListener('updateend', handler);
  audio.appendBuffer(buffer);
});
但是,这是许多承诺有用的地方之一。如果您为自己提供了一个启用承诺的
request\u xhr
(可能会使用)版本,它可以更干净:

// Promise-enabled request_xhr:
request_xhr_promise(url, function(buffer)
{
  // You'll need to check for the error condition and use reject if an error occurs
  return new Promise(function(resolve, reject) {
      video.addEventListener('updateend', function() {
        resolve();
      });
      video.appendBuffer(buffer);
  });
});

// Using it for this:
Promise.all([
    request_xhr_promise(video_url),
    request_xhr_promise(audio_url),
])
.then(appending_new_sources)
.catch(function(err) {
    // Handle error
});

不要在代码中包含行号。(我已经为你移除了。到目前为止已经移除了两次。)
// Promise-enabled request_xhr:
request_xhr_promise(url, function(buffer)
{
  // You'll need to check for the error condition and use reject if an error occurs
  return new Promise(function(resolve, reject) {
      video.addEventListener('updateend', function() {
        resolve();
      });
      video.appendBuffer(buffer);
  });
});

// Using it for this:
Promise.all([
    request_xhr_promise(video_url),
    request_xhr_promise(audio_url),
])
.then(appending_new_sources)
.catch(function(err) {
    // Handle error
});