在promise.done上传递参数?

时间:2013-11-13 12:11:50

标签: jquery

我有一个承诺,一旦完成,我希望运行我的getContentAll方法:

p_numContentTotal.done(getContentAll);

我还希望将param传递给该方法(脚本的上下文,因为我希望在方法中访问全局变量):

 p_numContentTotal.done(getContentAll(ctx));

但是通过添加它,该方法可以立即运行,我该如何解决这个问题呢?

2 个答案:

答案 0 :(得分:1)

将其包装在匿名函数中:

p_numContentTotal.done(function () { getContentAll(ctx) });

或明确推送ctx作为函数的上下文,并使用this访问其中的ctx变量:

function getContentAll() {
   console.log(this); //will print your ctx variable
}
p_numContentTotal.done(getContentAll.bind(ctx));

答案 1 :(得分:1)

通常,您希望无论如何都要封装整个脚本,以控制命名空间。完成后,完成访问脚本当前上下文的目标已经完成。这个'javascript closure'提供了Artyom提到的“匿名函数”功能。

你如何包装它取决于你。简单地说,您的整个脚本可能是文档就绪的对象,函数,块或回调。最终,这就是允许神奇在其他方法中发生的原因。

function main() {
    var ctx = 'current state';
    $("button").click(showContext);
    function showContext() {
        alert(ctx);
    }
}
$(main);

示例:http://jsfiddle.net/s6VDE/1/

请注意,这会保留参考访问权限(可能是您想要的也可能不是),如下所示:http://jsfiddle.net/s6VDE/5/