【问题标题】:I'm struggling with a Javascript Promise我正在为 Javascript Promise 苦苦挣扎
【发布时间】:2020-08-27 09:34:01
【问题描述】:

我有一个标签框,很像这个网站的标签框,用于标记问题。

提交表单后,JSON 响应允许我向用户显示一个对话框。在这个响应的情况下,对话框有一些额外的数据,一个 frontendupdate(填充了要更新的字段和值)结构。

tags.getData() 发送 JSON 请求以重新填充标签框的选项。

然后 tags.findBy() 允许我指定标签数据的“列”并匹配一个值。我试图在提交 getData 后让 findBy 触发。我知道如何使用回调来做到这一点,但 Promise 在这里似乎更好。

不幸的是,then() 似乎在 Promise 之后立即触发,在数据组织之前,我真的不明白为什么。

我尝试了几种变体,但显然我做错了什么。

function(dlg) {
  var id = +dlg.EXTRA.FRONTENDUPDATE.PlaceID;
  var tags = $('.tags-pTitle').data("tagsbox");

  if ($("#PlaceID").val() != id && id > 0) {
    var goal = function() {
      return new Promise(function resolve() {
        tags.getData();
        resolve();
      });
    };
    goal().then(function() {
      tags.findBy('PLACEID', id);
    });
  }
}

【问题讨论】:

  • 您说在组织数据之前,那个组织是做什么的?在您的承诺中返回 resolve() 之前,您似乎错过了那张支票
  • 当你执行 console.log(tags.getData()) 时,你会得到输出作为承诺吗?
  • 这应该是tags.getData().then(data=> tags.findBy... 你完全忽略了这里异步的请求
  • @FrankFajardo tags.getData 发送一些 ajax 请求,然后将结果排序到一个数组容器中。我的错误是认为tags.getData 会在解决之前完成。谢谢。

标签: javascript ajax promise


【解决方案1】:

如果 tags.getData() 返回一个 promise,你可以像这样直接链接

function(dlg) {
  var id = +dlg.EXTRA.FRONTENDUPDATE.PlaceID;
  var tags = $('.tags-pTitle').data("tagsbox");

  if ($("#PlaceID").val() != id && id > 0) {
    tags.getData().then(function() {
      tags.findBy('PLACEID', id);
    });
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 2019-03-21
    • 2014-05-11
    相关资源
    最近更新 更多