【发布时间】:2019-09-14 02:41:24
【问题描述】:
我有一个非常简单的 nodejs/express API,它在 request.post() 中创建了一个 request.get()。我只是想重新发送request.get()的响应正文。
我尝试使用带有request 和request-promise... .then() 方法的简单回调函数无济于事。
const request = require('request')
const rp = require('request-promise')
app.get("/", (req, res) => {
var mapCenter
var address = "user query"
res.send(submitSearch());
function submitSearch() {
if (!mapCenter || !mapCenter.lat) {
googleMapsClient.geocode({
address: address,
}, function(err, res) {
if (!err) {
mapCenter = {lat:res.lat, lng:res.lng };
submitSearch();
}
});
} else {
var parameters = {
uri: domain,
form: {
latitude: mapCenter.lat,
longitude: mapCenter.
},
json: true
}
rp.post(parameters).then(function(res) {
return getResults(res.id)
})
}
}
function getResults(id) {
rp.get(domain+ id).then(function(res) {
return res.Results;
})
}
})
在app.get() 函数中,我希望我的res.send(submitSearch()) 在我的rp.post() 调用中吐出我的return getResults(res.id) 语句,最终应该在我的getResults() 函数中给出return res.Results。
其中最令人困惑的部分是,我需要 submitSearch() 中为 googleMapsClient 正确分配 mapCenter 的奇怪 if 语句,然后再次递归调用 submitSearch()。我知道这是一个异步问题,我看过的无数线程和视频都没有涵盖这种特殊类型的案例。
【问题讨论】:
-
呃,不要编辑您的问题以包含您的最终解决方案。这不是*的工作方式。问题仍然是问题。答案就在哪里。我们希望您的问题能够显示您提出的原始问题,这样这可以成为原始问题的持久参考,然后是对该问题的一个或多个答案。请编辑您的问题,使其恢复原状。
-
注明。虽然@Akatsuki levi 的回答没有给我正确的结果。他的洞察力使我自己编辑代码以获得我需要的东西。如果我仍然接受他/她的回答可以吗?
-
您可以添加自己的答案以显示您最终决定使用的内容(是的,您可以回答自己的问题)。我正在研究一个我认为比两者都更好的答案,如果您想稍等一下,因为使用 googleMaps 的 promise 接口和链式 promise 确实要简单得多,这样您就可以在一个地方处理所有错误。 Levi 的回答缺少很多错误处理。
-
我现在发布了我的简化答案。