gpt4 book ai didi

javascript - 用 $watch 观看 Promise

转载 作者:行者123 更新时间:2023-12-03 08:38:13 29 4
gpt4 key购买 nike

我构建了一个具有指向 promise 的属性的指令。当 promise 解决时,我想运行一个对数据执行某些操作的函数。像这样:

 scope.$watch('source', function (dataSource) {
if( !dataSource ) return ;
dataSource.then(function ( d ) {
dataToView( d );
});
});

但是有一个问题。 source 可以在很短的时间内更改多次,并且每次我将处理程序注册到当前的 Promise 时。
例如,如果 source 更改了 3 次,则 dataToView() 被调用了 3 次!对于不再相关的 promise 。

我真正想要的是在绑定(bind)到 source 的 Promise 解析时调用 dataToView()

有人知道如何解决这个问题吗?

最佳答案

你需要某种可取消的回调,你可以这样做:

 scope.$watch('source', function (dataSource) {
if( !dataSource ) return ;
var currentCallbackId = Date.now();
dataSource.then(function (myId, d ) {
if (myId !== currentCallbackId) {
return;
}

dataToView( d );
}.bind(null, currentCallbackId));
});

说明:您为每个回调生成唯一的 ID,以便回调在调用时知道。 (使用绑定(bind)将其作为第一个参数传递给回调)

您将最新的回调 ID 保存在闭包变量中(也可以在“this”上),当调用回调时,它会检查其是否仍然相关

关于javascript - 用 $watch 观看 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33132733/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com