【问题标题】:get deferred promise value jQuery获取延迟承诺值jQuery
【发布时间】:2019-04-26 11:46:00
【问题描述】:

我有以下功能

function commentCount(id) {
    var deferred = new $.Deferred()
    var url =
      _spPageContextInfo.siteAbsoluteUrl +
      "/_api/lists/getByTitle('Comments')/items?$select=Id&$filter=ItemID eq " +
      id +
      " and Title eq 'Colleague'"
    getData(url).then(function(data) {
      deferred.resolve(data.d.results.length)
    })
    return deferred.promise()
  }

现在我想在 HTML 字符串中返回该值,如下所示,但它显示 [object object]

'<div class="card-footer"> <div class="row "><div class="col-lg mobile-center"><a href="#">' + commentCount(item.Id)

我怎样才能获得这样的价值

【问题讨论】:

  • 整数值
  • commentCount 将返回一个承诺,.. 使用 deferred 不会改变这里的事情,你可以刚刚完成 return getData(url).
  • 你能给我看看例子吗
  • 除非你说用过async / await,否则你不能做"some string" + somePromise()之类的事情,你需要先解决你的承诺。如果使用async / await,可以这样做 -> "some string" + await somePromise()
  • 我们如何做到这一点

标签: javascript jquery es6-promise jquery-deferred


【解决方案1】:

您的函数正在返回一个承诺,您必须先解决该承诺,然后才能获取数据

它也使用了不必要的$.Deferred,因为getData() 返回了一个承诺

需要是这样的:

function commentCount(id) {

  var url ='....';

   // return the getData promise 
  return getData(url).then(function(data) {
    // return the count to next `then()` in chain
    return data.d.results.length
  })

}

commentCount(someId).then(function(count){
   // do stuff with your html here
    var str ='<div> Count:' + count + '</div>';
})

【讨论】:

    猜你喜欢
    • 2015-03-27
    • 2023-03-21
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    相关资源
    最近更新 更多