开发者问题收集

从承诺返回的数组未定义

2018-02-15
73

我有一个函数调用 iTunes API,并从中返回一个对象数组。我的主要函数调用此函数(和其他承诺)并等待所有承诺完成。这有效,但是,对于 iTunes API 承诺,返回的数组始终为“未定义”。

我的承诺:

function getiTunesMusic() {
  var options = {
    uri: "https://itunes.apple.com/lookup?id=62820413&entity=song&limit=10",
    json: true
  }

  retrieve(options) // This does a GET request
    .then(repos => {
        var result = repos.results
        result.shift() // I get the array of results, minus the first result
        console.log(result) // This prints out the full array of song objects
        return result
    })
    .catch((error) => {
        return null
    })
}

我等待承诺完成块的代码:

Promise.all(promises)
  .then(objects => {
    var music = objects[0]
    console.log("music", objects[0]) // This prints out "music undefined"
    profile.music = music
  }

奇怪的是,当我打印出我在承诺中返回的 iTunes api 结果时,它打印得很好。但是,在承诺完成块中它始终未定义。我该如何解决这个问题?

1个回答

您没有从函数返回承诺,因此返回默认返回 undefined

尝试

return retrieve(options) // this returns the promise

代替

retrieve(options)
Nikhil Aggarwal
2018-02-15