Javascript中的承诺

时间:2016-05-31 16:07:57

标签: javascript promise

我一直在研究有关如何使用承诺的各种讨论,而且我没有得到任何工作。

我一直收到错误"无法读取未定义的属性。"

"那么," "完成"等内置到Javascript?或者他们是否要求我包含其他一些外部脚本?

这是我最近尝试使用2个简单对话框的尝试(确认和拒绝都是简单的对话框):

var confirmWithPromise = Confirm(); 
var reject = confirmWithPromise.then(Reject("This record cannot be deleted."));

如果我能以最简单的方式开始让我的榜样上班,我想我可以从那里开始。

感谢。

更新:这是我的Confirm() - 它没有返回一个承诺。我不完全理解如何实现它的回归:

 function Confirm() {
    var buttons = [
{
    text: "Yes",
    //icons: {
    //    primary: "ui-icon-heart"
    //},
    click: function () {
        $(this).dialog("close");
        callback(true);
    }

    // Uncommenting the following line would hide the text,
    // resulting in the label being used as a tooltip
    //showText: false
},
{
    text: "No",
    //icons: {
    //    primary: "ui-icon-heart"
    //},
    click: function () {
        $(this).dialog("close");
        callback(false);
    }

    // Uncommenting the following line would hide the text,
    // resulting in the label being used as a tooltip
    //showText: false
}
    ];

    showDialog("Confirm", "Are you sure?  Once the record is deleted, it cannot be recovered.", buttons);

}

2 个答案:

答案 0 :(得分:4)

  

Javascript内置了“then”,“done”等等吗?

是。它们是由Promise objects定义的the ES6 specification方法。

  

我一直收到错误“无法读取未定义的属性。”

您只能在promise对象上使用它们。该错误消息表明Confirm的返回值(不是内置的JavaScript,但confirmc而不是C)提供为浏览器的Web API是undefined而不是promise对象。

您需要编辑Confirm以便它返回一个承诺。

答案 1 :(得分:-1)

Promise是最新规范的一部分,但并非所有浏览器都实现它们 - IE11值得注意。您可以通过使用所谓的“promise polyfill”或使用通过其“延迟”构造实现的promise的jQuery实现来克服这一点 - 它不是Promises本身的实现,但它实现了非常类似的一般概念。

在您的情况下,您的'Confirm()'方法必须返回'promise'对象。在jQuery中,Confirm可能看起来像:

function Confirm(){
   var deferred = $.Deferred();

   ///do something interesting and asynchronous

   return deferred.promise();
}

返回承诺后,当调用deferred.reject()deferred.resolve()时,“.then”元素可用于处理相应的回调。