使用 promise.then 时是否可以留在单击事件调用堆栈中?
Is it possible to stay inside a click event call stack when using promise.then?
音频元素上的 play()
方法必须由用户启动的事件触发,但我的点击事件中使用的 .then
似乎破坏了调用堆栈。在这种情况下我必须使用 .then
。
ng-click 在其控制器中调用 open(file)
,这只是我的 "player" 服务对 open()
的引用。
open()
来自 "player" 服务:
this.open = function(file){
storage.getUrl(file)
.then(function(url){
audio.playUrl(url);
});
};
getUrl()
只是 returns 一个字符串承诺。
playUrl()
来自 "audio" 服务:
function playUrl(url){
audio.src = url;
audio.play();
};
现在我可以 audio.play()
通过 "audio" 服务中不使用任何承诺的另一种方法。我可以从 open()
开始这项工作吗?
Is it possible to stay inside click event call stack when using promise.then
?
在这种情况下不是。如果 promise 同步完成是可能的,但通常 promise 用于将异步完成的情况,这里就是这种情况。
相反,您需要在 点击发生之前 完成 storage.getUrl
部分(预加载),这样您就可以在用户事件期间播放。
音频元素上的 play()
方法必须由用户启动的事件触发,但我的点击事件中使用的 .then
似乎破坏了调用堆栈。在这种情况下我必须使用 .then
。
ng-click 在其控制器中调用 open(file)
,这只是我的 "player" 服务对 open()
的引用。
open()
来自 "player" 服务:
this.open = function(file){
storage.getUrl(file)
.then(function(url){
audio.playUrl(url);
});
};
getUrl()
只是 returns 一个字符串承诺。
playUrl()
来自 "audio" 服务:
function playUrl(url){
audio.src = url;
audio.play();
};
现在我可以 audio.play()
通过 "audio" 服务中不使用任何承诺的另一种方法。我可以从 open()
开始这项工作吗?
Is it possible to stay inside click event call stack when using
promise.then
?
在这种情况下不是。如果 promise 同步完成是可能的,但通常 promise 用于将异步完成的情况,这里就是这种情况。
相反,您需要在 点击发生之前 完成 storage.getUrl
部分(预加载),这样您就可以在用户事件期间播放。