道场执行的顺序

时间:2014-02-07 15:27:09

标签: javascript dojo

我是dojo的新手,我正在尝试按特定顺序分配变量。这是一个例子:

require(["dojo/request"], function(request){
    var myVar;

    request("helloworld.txt").then(
        function(text){
            myVar = text;
            alert(myVar);  //2nd alert to display and contains contents of helloworld.txt
        },
            function(error){
            console.log("An error occurred: " + error);
        }

    );

    alert(myVar); //1st alert to display and displays undefined
});

我需要在“.then”函数内部分配myVar,然后在该函数之外使用它。换句话说,我需要第一个警报来包含helloworld.txt的内容。提前谢谢!

1 个答案:

答案 0 :(得分:0)

确保您了解回调和异步代码!这些是Javascript中的绝对基本概念,所以通过阅读它,你会给自己一个大忙。

它的解释远比我多次好,所以我会给你留下一些链接(以及快速完成你想要的东西)。

即使您没有阅读这些链接,也必须记住以下内容:仅因为第10行在您的Javascript代码中位于第100行之前,并不意味着第10行将在第100行之前运行。

Dojo的request函数返回一个名为“Promise”的东西。这个承诺允许你说“嘿,将来,在你完成我刚刚告诉你的事情后,运行这个功能!” (您使用then函数执行此操作,就像您已完成的那样。)

如果您发现这一点令人困惑,请记住,promises在很多方面只是您在许多其他框架或脚本中看到的onSuccessonError属性的包装。

伟大的是then也会带来新的承诺!所以你可以将它们“链接”在一起:

require(["dojo/request"], function(request){
    var myVar;

    request(
        "helloworld.txt"
    ).then(
        function(text){
            myVar = text;
            alert("First alert! " + myVar); 
        },
        function(error){
            console.log("An error occurred: " + error);
        }
    ).then(
        function() {
            alert("Second alert! " + myVar);
        }
    );
}); 

Promise也有其他优点,但我不会在这里进行。