Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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 了解如何使用JS承诺_Javascript_Ecmascript 6_Promise - Fatal编程技术网

Javascript 了解如何使用JS承诺

Javascript 了解如何使用JS承诺,javascript,ecmascript-6,promise,Javascript,Ecmascript 6,Promise,我最近开始学习JS承诺,这样我就可以与Vimeo的视频播放器API接口,他们让我有点困惑。我来自一个非常同步/连续的背景(很多是C++),所以JS的异步特性有时让我很难完全理解 我试图调用Vimeo的API函数(如下)来获取视频的当前播放时间 `player.getCurrentTime().then(function(seconds) { //seconds is what I am looking to get })` 此外,我使用Youtube的API(如下)也有类似的用途 p

我最近开始学习JS承诺,这样我就可以与Vimeo的视频播放器API接口,他们让我有点困惑。我来自一个非常同步/连续的背景(很多是C++),所以JS的异步特性有时让我很难完全理解

我试图调用Vimeo的API函数(如下)来获取视频的当前播放时间

`player.getCurrentTime().then(function(seconds) {
     //seconds is what I am looking to get
})`
此外,我使用Youtube的API(如下)也有类似的用途

player.getCurrentTime()
现在,混乱来了。Vimeo使用承诺,据我所知,youtube没有。所以当我做下面的事情时,我没有问题,一切对我来说都是有意义的

someFunction() {
    var time = player.getCurrentTime();
    return time;
}
然而,如果我对Vimeo的API做同样的事情,我会对在返回语句之前不返回的承诺产生问题,并且我会得到一个未定义的返回结果。我发现解决这个问题的唯一方法是将其余代码移到promise中。但是,我的web应用程序将与youtube和vimeo兼容,因此我经常遇到这样的问题:必须复制大量代码,如下所示

if (playerType == "youtube") {
  time = player.getCurrentTime();
  //large chunck of code relying on the time returned
} else if (playerType == "vimeo") {
  time = 0;
  player.getCurrentTime().then(function(seconds) {
    time = seconds;

    //copied large chunck of code relying on the time returned
  })
}

就代码量和理解的简单性而言,youtube方法似乎效率更高,这让我想知道为什么Vimeo会在这种简单、快速的情况下使用承诺。有经验的JS/promise程序员有什么建议吗?

也许vimeo
getCurrentTime
函数是异步的-因此使用promises,而不是回调,会让它更酷,更具街头信誉-因为“promises”,就像蝴蝶结一样,很酷:p

无论如何,要“干燥”代码,只需在Promise.resolve()中从youtube返回getCurrentTime


介绍与异步vimeo方法相对应的youtube方法。双赢。我不同意@Meier。我在问是否有一种方法可以避免复制和粘贴大量代码(由下面的有用答案提供),然后只考虑方法的不同。
promse
应该是
promise
——否则代码将无法工作
var promise;
if (playerType == "youtube") {
    promise = Promise.resolve(player.getCurrentTime());
} else if (playerType == "vimeo") {
    promise = player.getCurrentTime();
}
promise.then(function(seconds) {
    time = seconds;
    //large chunck of code relying on the time returned
}