如何在另一个事件处理程序中等待q.js的异步函数结果?

时间:2015-04-16 15:33:35

标签: javascript kendo-ui promise kendo-upload

我有下一个Javascript事件处理程序:

 function eventHandler(e) {
        //doSomething 1...

        asyncFunctionWhichReturnPromise(data).then(function (data) {
              //doSomething 2...
              e.data = {
                  Id: data.Id,
                  Type: "Type" 
              };
        });
        //doSomething 3...
 }

所以,当我运行代码" // doSomething 3 ..."之前执行" // doSomething 2 ..."但由于它是一个事件处理函数,我需要在" // doSomething 2 ..."中准备数据。将引发下一个事件之前的代码块。我怎么能用q.js(Kris Kowal的承诺库)来做呢?

重要补充信息:实际上我需要阻止// doSomething 2 ...在离开eventHandler之前执行,因为e.data初始化将在下一步使用 - 剑道ui上传将在服务器上上传数据。

1 个答案:

答案 0 :(得分:0)

只需移动回调函数内的doSomething 3...代码

即可
 function eventHandler(e) {
        //doSomething 1...

        asyncFunctionWhichReturnPromise(data).then(function (data) {
              //doSomething 2...

              //doSomething 3...
        });
 }

如果您希望更明显doSomething 3...之后应该运行,可以将其置于函数内

 function eventHandler(e) {
        //doSomething 1...

        asyncFunctionWhichReturnPromise(data).then(function (data) {
              //doSomething 2...

              doSomething3();
        });

        function doSomething3() {
              //doSomething 3...
        }
 }