我一直在研究有关如何使用承诺的各种讨论,而且我没有得到任何工作。
我一直收到错误"无法读取未定义的属性。"
"那么," "完成"等内置到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);
}
答案 0 :(得分:4)
Javascript内置了“then”,“done”等等吗?
是。它们是由Promise objects定义的the ES6 specification方法。
我一直收到错误“无法读取未定义的属性。”
您只能在promise对象上使用它们。该错误消息表明Confirm
的返回值(不是内置的JavaScript,但confirm
(c
而不是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”元素可用于处理相应的回调。