2

我们正在开发 Windows 8 javascript 应用程序,并创建了所有必要的框架来执行所需的操作。该框架到处都使用 jQuery 代码。

现在,我们也必须在后台任务中使用相同的框架,但事实证明,jquery 在后台任务中不受支持,因为它没有有效的窗口对象。

由于我们只使用了很少的 jQuery 方法,我们决定创建一个包装类,当在后台任务中使用它时将充当 jQuery。

我们坚持使用 winJs.promise 实现 jquery 的延迟功能。问题是在 jQuery 中我们使用 .done().fail() 来处理解析和拒绝,而在 winjs.promise 中,.done() 在方法队列中最后实现并且没有失败方法。

我们尝试实现失败方法,但无法实现 .done().fail()。

谁能给出任何建议我们如何在包装类中使用 winjs.promise 来实现它?

    var $ = (function () {
    function $() {
    }


    $.deferred = function () {
// implement deferred using WinJs.Promise
    }

然后在这样的框架中使用它:

 function divide(num1, num2) {
    var deferred = $.deferred();

    if (num2 > 0) {
        return deferred.resolve(num1 / num2);
    }
    else {
        return deferred.reject("num2 can't be zero");
    }
}

divide(1, 2).done(function (value) {
    console.log('Anser is:' + value);
}).fail(function (value) {
    console.log('Error: ' + value);
});
4

1 回答 1

1

WinJS promise.done 方法有第二个参数,即错误函数。

promise.done(onComplete, onError, onProgress);

在你的情况下是这样的:

divide(1, 2).done(function (value){
     console.log('Answer is:' + value);  
 },
 function (error) {
     console.log('Error: ' + error);
 });

要在您自己的函数中完成此操作,您可以从包装器中返回一个承诺,如下所示:

function divide(num1, num2) {
    return new WinJS.Promise(function (c, e, p) {

        if (num2 > 0) {
            c(num1 / num2);
        }
        else {
            e("num2 can't be zero");
        }
    });
}
于 2014-02-03T13:51:15.303 回答