【问题标题】:jquery promise, chain a get request after successful post requestjquery promise,在成功发布请求后链接获取请求
【发布时间】:2018-06-19 03:55:52
【问题描述】:

我正在尝试使用 jQuery(当前版本 3.2.1)学习 Promise。

我只想在发布请求成功后才运行获取请求,但我当前的代码不起作用。提交数据工作正常,但获取请求不运行。 我不确定如何链接这两个操作?

$('#newPoiForm').submit(function (e) { // handle the submit event
  e.preventDefault();
  let formData = $(this).serialize();
  console.log(formData);

  $.post({
      type: 'POST',
      url: '/api/pois/',
      data: formData
    }).done(function(){
      console.log('new asset submitted')
      return $.get({url: '/api/pois/last'})
    }).then(function (data) {
      // do stuff
  })

【问题讨论】:

  • 有多种承诺类型。 success()error()then()done(),这取决于你需要什么。 Id 查找 api 以了解您要完成的任务。
  • done -> thendone 只是一个成功回调,另一方面,.then 将管道返回值并继续链。
  • 使用 then 似乎效果更好。即使第一个失败,第二个 promise 还会运行吗?
  • 不,因为 .then 的第一个回调只有在成功时才会被调用。

标签: javascript jquery promise


【解决方案1】:

您的问题是使用 done() 进行第一个回调 - 这是一个遗留的 jQuery 事物,并且不会链接承诺。如果您将其更改为then(),它应该可以正常工作:

$.post({
  type: 'POST',
  url: '/api/pois/',
  data: formData
}).then(function(){           // don't use done()
  console.log('new asset submitted')
  return $.get({url: '/api/pois/last'})
}).then(function (data) {
  // do stuff
});

更多详情请查看此答案:jQuery deferreds and promises - .then() vs .done()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多