JavaScript承诺不会将数据传递给.then,除非我明确使用Promise.resolve

时间:2019-01-10 21:48:42

标签: javascript promise

我的代码从Google翻译获取翻译,将翻译推送到数组中,然后将翻译数组传递到下一个代码块。否则,取决于语法。这有效:

translate.translate(text, target)
.then(function(results) {
  translation = results[0];
  translationArray.push(translation);
  return Promise.resolve(translationArray);
})
.then(function(translationArray) {
  console.log(translationArray);

此代码无效:

translate.translate(text, target)
.then(function(results) {
  translation = results[0];
  return translationArray.push(translation);
})
.then(function(translationArray) {
  console.log(translationArray);

translationArray记录为11是什么意思?为什么需要显式使用Promise.resolve

我尝试了这个,但没有帮助:

const finalPromise = translate.translate(text, target)
.then(function(results) {
   translation = results[0];
   return translationArray.push(translation);
  })
.then(function(translationArray) {
   console.log(translationArray);

1 个答案:

答案 0 :(得分:4)

Array#push返回数组的新长度。如果您的数组为空,则在添加元素后,新长度为1。这就是1的来源。

您不必使用Promise.resolve,只需使用return translationArray;