对 Angular 还很陌生...
因此,如果我在 Angular 服务中使用 Ajax(而不是 $http),我想保留对回调函数的引用。我怀疑这里的 this.callback
变量可能存在竞争条件。
当第一个 session 仍在执行 Ajax 调用时,另一个 session 是否可以介入并踩踏 this.callback
?
var myServer = angular.module("mymod", ["my.server"]);
myServer.service("$myservice",
function($server)
{
var me = this;
this.callback = null;
this.saveDone = function(data)
{
if (me.callback) me.callback();
}
this.save = function(item, cb)
{
me.callback = cb;
dict = {"name" : "savePDataStory"};
dict.item = item;
actions = [dict];
$server.realAjaxCall(actions, this.saveDone, true);
}
最佳答案
是的。每次调用 save
都会覆盖 this.callback
,因为它在 save
调用之间共享。解决方案是将回调存储在 save
本身内,每次调用该函数时该回调都是唯一的。您可以像这样内联执行此操作:
$server.realAjaxCall(actions, function (data) {
cb();
}, true);
这保留了调用callback
时不包含data
的原始代码片段的行为。如果您不介意将 data
传递给 callback
,您可以直接使用 cb
来简化它,而不是将其包装在函数中:
$server.realAjaxCall(actions, cb, true);
关于javascript - Ajax 调用的 Angular 1 服务的竞争条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44037199/