Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 写一个承诺_Javascript_Promise - Fatal编程技术网

Javascript 写一个承诺

Javascript 写一个承诺,javascript,promise,Javascript,Promise,我有一个小部件,还有一些代码可以像这样打开对话框 $("#foo").click(); 现在我需要设置一些代码,以便在用户进行选择并关闭对话框后运行 我知道这是一种承诺模式,但我不知道如何去写一个承诺。有人能给我一些指导吗?在输入小部件上放置更改处理程序没有问题,但我需要编写如下代码: $("#foo").click().then(function(){ $("#theForm").submit(); }); 据我所知,满足后条件的情况(用户选择一个文件并单击“确定”)被称为已解决,而对

我有一个小部件
,还有一些代码可以像这样打开对话框

$("#foo").click();
现在我需要设置一些代码,以便在用户进行选择并关闭对话框后运行

我知道这是一种承诺模式,但我不知道如何去写一个承诺。有人能给我一些指导吗?在输入小部件上放置更改处理程序没有问题,但我需要编写如下代码:

$("#foo").click().then(function(){
  $("#theForm").submit();
});
据我所知,满足后条件的情况(用户选择一个文件并单击“确定”)被称为已解决,而对于不满足后条件的情况,我现在无法使用另一个名称

那些建议我这么做的人

$("#foo").change(function(){
  $("#theForm").submit();
}

我知道这个解决方案,但它并没有教会我写承诺的任何东西。

世界上有大量关于承诺的文档,但这里有一个简单的例子:

var promise = new Promise(function(resolve, reject) {
  // do a thing, possibly async, then…

  if (/* everything turned out fine */) {
    resolve("Stuff worked!");
  }
  else {
    reject(Error("It broke"));
  }
});
然后:

promise.then(function(result) {
  console.log(result); // "Stuff worked!"
}, function(err) {
  console.log(err); // Error: "It broke"
});

那可能会有帮助!祝您好运

您需要使用
承诺
构造函数,它将使您能够解决承诺:

var p = new MyLib.Promise(function(resolver) {
    $("#foo").one("click", resolver);
}); // a promise that resolves with the next click on #foo
p.then($.fn.submit.bind($("#theForm"))); // or whatever
使用jQuery,您需要使用:


如果您正在寻找一个用于编码事件的功能接口,请查看FRP,主要是BaconJS,它在jQuery的基础上构建了所有您想要的东西,而且非常漂亮,我是promise的支持者,但我相信它提供了比功能性UI编码更坚实的抽象。我不认为这是一个重复的问题。当然,另一个问题的答案对于这个问题来说是合适的,但是他们来自不同的思维框架,产生不同的搜索词。我认为这个问题的价值在于它所支持的替代搜索向量。因为即使标记为“复制”,它仍然可以达到这个目的,我想我们已经完成了,但我希望有另一个标记“等效”。Bergi的答案很好,但这正是我想要的,特别是教程。在发布了这个问题后,我在msdn上找到了一篇关于这个主题的文章,但它有点IE特有;和其他人一样,我使用jQuery,因此我将利用您在延迟模式上的链接。
$.fn.nextEvent = function(type) {
    var d = new $.Deferred();
    this.one(type, function() {
        d.resolveWith(this, arguments);
    });
    return d.promise();
};

$("#foo").nextEvent("click").then(function(e) {
    $("#theForm").submit();
});