上下文混合在$.deferred.promise中

Context getting mixed in $.deferred.promise

本文关键字:promise deferred 混合 上下文      更新时间:2023-09-26

我有以下代码;

function myFunction(promiseObject){
     var that = this;
     promiseObject
        .done(function(){
                 //using that here
              });
}

上述函数在多个上下文中被调用,因此在每次调用中this更改的值。我面临的问题是,对于许多并发调用,that的值被另一个也在完成过程中的上下文覆盖。

我想了解这可能是什么原因。还想了解that myFunction中定义但在附加的回调方法中使用的变量的作用域背后的概念是什么。

提前致谢:)

-德夫斯里

我希望我正确理解您的问题。 在myFunction中定义并在回调中可访问的that变量背后的概念是工作中的词法范围。 它正在创建一个闭包(基本上是对定义回调的函数的执行环境的引用),以便回调访问。

myFunction内部this的价值将取决于您如何调用myFunction

如果您希望myFunction具有特定的上下文,则需要使用该上下文调用它,如下所示:

var myContext = { foo: "bar" };
myFunction.call(myContext);

myFunction 内部的 this 值现在将等于 myContext

如果您希望that值在调用之间保持一致,则需要确保在任何地方都使用正确的上下文调用/应用myFunction

或者,您可以使用像 underscore.js 的 _.bind 这样的函数:

myFunction = _.bind(myFunction, myContext);

myFunction现在将始终绑定到特定的上下文。