开发者问题收集

使用 Promise 时出现错误“无法读取未定义的属性‘then’”

2016-01-28
1915

我正在使用承诺并遵循 另一个示例 ,但当我运行脚本时,我收到错误 TypeError:无法读取未定义的属性“then” 。我的代码显示如下:

var completedLinks = ["http://www.example.com/1","http://www.example.com/2","http://www.example.com/3"]
function fetchSiteDetails(arr){
  arr.reduce(function(promise, email) {
    console.log(email)
  }, Promise.resolve());
}

fetchSiteDetails(completedLinks).then(function() {
    console.log('all done');
});

我猜 fetchSiteDetails 不适合使用 then ,但我不确定为什么?

2个回答

您没有从 fetchSiteDetails 返回承诺,也没有使用 arr.reduce 生成值。请尝试以下操作:

function log(message) {
  document.body.innerHTML += message + '<br />';
}

function fetchSiteDetails(arr) {
  return arr.reduce(function(promise, email) {
    log(email);
    return promise;
  }, Promise.resolve());
}

fetchSiteDetails([1, 2, 3]).then(function() {
  log('Done');
});
Mike Cluck
2016-01-28

这就像您想要 Promise.all() 已经提供的相同行为。 尝试以下操作:

var completedLinks = ["http://www.example.com/1","http://www.example.com/2","http://www.example.com/3"]
function fetchSiteDetails(arr){
  return Promise.all(arr.map(function(email) {
    return Promise.resolve(); // do whatever here, but return a promise !
  }));
}

fetchSiteDetails(completedLinks).then(function() {
  console.log('all done');
});
Jerome
2016-01-28