代码之家  ›  专栏  ›  技术社区  ›  AndreaNobili

这个promise示例究竟是如何工作的?

  •  0
  • AndreaNobili  · 技术社区  · 7 年前

      appStatus = new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve('stable');
        }, 2000);
      });
    

    我知道这个指令是这样做的:设置 应用程序状态 在经过2秒后,将变量设置为字符串“stable”。是这个吗?

    应用程序状态 变量包含 许诺 “稳定” 2秒后的解析值。但究竟是什么,包含什么?

    的常见用例是什么

    2 回复  |  直到 7 年前
        1
  •  3
  •   Faly    7 年前

    应用程序状态 值将不是字符串' 稳定的 稳定的

    appStatus.then((result) => { console.log(result); });
    
        2
  •  1
  •   towc    7 年前

    承诺用于JS的许多方面,angular是一个小例子。长话短说,承诺是 .then XMLHttpRequest ),你可以想到 .then(x) xhr.onload = x ,但这种构造允许更强大的代码。这两段代码 行为 以非常相同的方式:

    // callback "format"
    const xhr = new XMLHttpRequest;
    xhr.open('GET', '/api/some-query');
    xhr.onload = () => { console.log(xhr.response); };
    xhr.send();
    
    // promise "format"
    const xhrPromise = new Promise((resolve, reject) => {
      const xhr = new XMLHttpRequest;
      xhr.open('GET', '/api/some-query');
      // bad error handling, but proves the point
      xhr.onload = () => { resolve(xhr.response); };
      xhr.send();
    });
    xhrPromise.then((text) => { console.log(text); });
    

    setTimeout(() => { f('stable') }, 2000);
    

    这是假设您将其附加到当前代码中:

    appStatus.then((status) => { f(status) });
    

    一开始可能不太清楚,但一旦你深入研究并发现承诺是可以链接的,这会如何变得更好( appStatus.then(...).then(...) .catch 类似的,很容易爱上他们

    有很多好的读物可以理解承诺是如何起作用的,比如 the MDN docs this post by Jake Archibald