【发布时间】:2017-10-10 13:13:40
【问题描述】:
我正在使用react-select 来自动完成搜索栏中的选项。搜索栏会显示两个类别之一的结果,具体取决于它所访问的 API 端点。
现在,它可以处理来自一个点或另一个点的数据,但我无法将来自两个端点的数据返回到 react-select 的 loadOptions 参数。
来自this answer关于多个API调用,我决定使用promises一次返回所有数据,但我收到错误Uncaught TypeError: promise.then is not a function at Async.loadOptions
这是我的loadOptions 代码:
const getAsync = (tripId, destinationIndex, input) => {
if (!input) {
return { options: [] }
}
function getMusement(input) {
return new Promise(function(resolve, reject) {
TVApi.musement.autocomplete(input)
.then((m) => {
const musementOptions = m.map(musementToOption).slice(0, 4)
return resolve(musementOptions)
})
})
}
function getFourSquare(tripId, destinationIndex, input) {
return new Promise(function(resolve, reject) {
TVApi.spot.autocomplete(tripId, destinationIndex, input)
.then((fs) => {
const fsOptions = fs.map(spotToOption).slice(0, 4)
return resolve(fsOptions)
})
})
}
return Promise.all([getMusement(input), getFourSquare(tripId, destinationIndex, input)])
.then((allData) => {
const merged = [].concat.apply([], allData)
console.log(JSON.stringify(merged)) // logs out with correct data
return {options: merged}
})
}
【问题讨论】:
-
TVApi.musement.autocomplete 是否返回承诺?
-
具体在哪一行?你确定
TVApi方法总是返回承诺吗? -
@Bergi 没有它我该怎么做?
-
@crashspringfield 你只需要写
function getMusement(input) { return TVApi.musement.autocomplete(input).then(m => { … return musementOptions }) }(getFourSquare也一样)
标签: javascript reactjs promise react-select