【问题标题】:What prommaing obstacle do JavaScript Promises solve? Or what ARE they, exactly? [closed]JavaScript Promises 解决了哪些潜在障碍?或者它们到底是什么? [关闭]
【发布时间】:2016-05-22 01:59:26
【问题描述】:

我已经用 JavaScript 编程了几年,直到最近才听说过 Promise 这个词。我在网上阅读了多篇关于它的文章,但仍然不明白 Promise 是什么。我没有看到任何严格的定义。我看到的每个例子都是我已经知道如何解决的问题。例如,

get('story.json').then(function(response) {
  console.log("Success!", response);
}, function(error) {
  console.error("Failed!", error);
});

来自https://davidwalsh.name/promises 我早就知道该怎么做了

$.ajax({
   url : 'story.json',
   method : 'GET',
   success : function(response) { console.log("Success!", response); },
   error : function(error) { console.error("Failed!", error); }
});

那么我是否在不知道术语的情况下使用了 Promise 的概念?或者我错过的大型派对在哪里?

【问题讨论】:

  • 你的第二个例子是一个 promise 的 jQuery 实现。
  • @fskirschbaum 一点也不...
  • @plalx 当然可以。当然,虽然它取决于您正在使用的 jQuery 版本,但它是延迟的,并且给出了与提问者所说的相同的“结果”,但本质上,是的,它是相同的概念。另外,我必须这样做。 jQuery !== JavaScript
  • 这里的语法当然不是最新的。现在您真的想使用带有.done() 的链,而不是传递设置对象。您的问题的答案有点复杂,但是使用 success:.done() 回调函数的 XHR 对象延迟的概念类似但不是,实际上并不是 Promises。 jQuery Deferred, jQuery .promise, JavaScript Promise Object

标签: javascript jquery ajax asynchronous promise


【解决方案1】:

添加是能够链接事物。 如果您需要拨打三个电话,而这三个电话都必须一个接一个地发生,您可以将您的 Promise 链接在一起,而不是:

$.ajax({
  success () {
    $.ajax({
      success () {
        $.ajax({
          success () { /* do something with your sets of results */ }
        });
      }
    });
  }
});

相反,您可以执行以下操作:

fetch(url1).then(toJSON)
  .then(result1 => fetch(url2).then(toJSON))
  .then(result2 => fetch(url3).then(toJSON));

这两个示例所做的事情并不完全相同(您需要使用每个结果,或者将其传递出去,然后将其传递),但基本上承诺包装您的流程并返回一个对象(带有 @ 987654323@ 方法),它允许您添加回调(并继续添加它们)。

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    相关资源
    最近更新 更多