javascript - 保持回调函数执行直到 Promise 完成

标签 javascript ajax promise ecmascript-5

我有一些第三方库,我正在监听其事件。我有机会修改该库将附加到 UI 中的数据。在数据修改同步之前一切都很好。一旦我涉及到 Ajax 回调/ promise ,这就不起作用了。让我举一个例子来说明问题。

以下是我监听事件的方式:-

d.on('gotResults', function (data) {

  // If alter data directly it works fine.
  data.title = 'newTitle';
  // Above code alters the text correctly.

  //I want some properties to be grabbed from elsewhere so I make an Ajax call.
  $.ajax('http://someurl...', {data.id}, function (res) {
    data.someProperty = res.thatProperty;
  });
  // Above code doesn't wait for ajax call to complete, it just go away and 
  renders page without data change.


  // Yes I tried promises but doesn't help
  return fetch('http://someurl...').then(function (data) {
    data.someProperty = res.thatProperty;
    return true;
  });
  // Above code also triggers the url and gets away. Doesn't wait for then to complete.

});

我无法更改/更改第三方库。我所要做的就是监听事件并更改数据。

任何更好的解决方案。没有。我无法使用异步/等待、生成器,因为我希望 ES5 浏览器支持它。

最佳答案

您不能让同步函数等待异步响应,根据定义这是不可能的。您的选择几乎是:

  1. 坏主意:发出同步 AJAX 请求。再说一遍:糟糕的想法。这不仅会阻塞整个浏览器,而且也是一种已弃用的做法,不应该在新代码中使用,甚至永远不应该使用。

  2. 首先获取异步数据并将其存储在本地,以便在需要时同步可用。显然,只有当您提前知道需要哪些数据时,这才有效。

  3. 更改第 3 方库以添加对异步回调的支持,或请求 vendor 提供支持。

  4. 找到一些技巧,您可能会让库首先处理不完整的数据,然后在异步数据可用时更新它。这显然在很大程度上取决于该库的具体情况和正在完成的任务。

关于javascript - 保持回调函数执行直到 Promise 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48298824/

相关文章:

php - 通过 AJAX 处理大型数据集不会带来速度优势

javascript - promise : Repeat operation until it succeeds?

javascript - 如何正确从 firebase 访问 uid 以将记录添加到另一个数据库中?

javascript - javascript文件中的@required注解

jquery - 使用 jQuery ajax 调用来填充动态对象

jQuery在表单字段中设置ajax返回值

JavaScript 异常在 Promise 链中丢失

javascript - 从同步 JS 函数返回 Promise

javascript - 如何 var FOO = FOO || {} 成语在 Javascript 中有用吗?

javascript - 如何在复选框更改事件上查找 div 而不是在 jquery 选择器中硬编码 div id?