如何嵌套javascripthttp请求调用?
how to nest javascript http request calls?
我正在努力进行调用,以便在单击按钮时将值传递给 http 请求。第一个请求的结果被解析出来,然后用于第二个 http 调用。我可以获得第一个工作电话:
{
import config from "../config.json";
const httpModule = require("tns-core-modules/http");
...
let value1 = makeApi1Call(rawValue);
let value2 = makeApi2Call(value1);
makeApi1Call(rawValue) {
let aValue = null;
httpModule.request({
url: url1+rawValue,
method: "GET"
}).then((response) => {
let status = response.statusCode;
if (status === 200) {
let content = JSON.parse(response.content);
aValue = content[0].aValue;
console.log("===>received aValue : " + aValue);
return aValue;
} else if (status === 404) {
console.log("===> returned [404] ... returning null " );
return aValue;
}
}, (e) => {
console.log("===> Error occurred " + JSON.stringify(e));
return aValue;
});
}
当然,因为http响应在调用它之后完成,所以返回值为null。我可以在控制台日志中看到它,但是已经来不及使用了。我尝试添加一个回调方法来进行我的第二次 http 调用,但我没有掌握它。我不确定我是否应该在我的 (status == 200) 块中进行第二次 api 调用,或者是否有更好的 "javascript" (我仍在学习)方法?
let value1;
let value2;
makeApi1Call(rawValue) {
let aValue = null;
httpModule.request({
url: url1+rawValue,
method: "GET"
})
.then((response) => {
value1 = response.someData
})
.then(() => {
value2 = makeAPIcall2(value1)
}
我更改了您的代码,这样至少您的第二个调用在第一个调用完成之前不会触发。
我正在努力进行调用,以便在单击按钮时将值传递给 http 请求。第一个请求的结果被解析出来,然后用于第二个 http 调用。我可以获得第一个工作电话:
{
import config from "../config.json";
const httpModule = require("tns-core-modules/http");
...
let value1 = makeApi1Call(rawValue);
let value2 = makeApi2Call(value1);
makeApi1Call(rawValue) {
let aValue = null;
httpModule.request({
url: url1+rawValue,
method: "GET"
}).then((response) => {
let status = response.statusCode;
if (status === 200) {
let content = JSON.parse(response.content);
aValue = content[0].aValue;
console.log("===>received aValue : " + aValue);
return aValue;
} else if (status === 404) {
console.log("===> returned [404] ... returning null " );
return aValue;
}
}, (e) => {
console.log("===> Error occurred " + JSON.stringify(e));
return aValue;
});
}
当然,因为http响应在调用它之后完成,所以返回值为null。我可以在控制台日志中看到它,但是已经来不及使用了。我尝试添加一个回调方法来进行我的第二次 http 调用,但我没有掌握它。我不确定我是否应该在我的 (status == 200) 块中进行第二次 api 调用,或者是否有更好的 "javascript" (我仍在学习)方法?
let value1;
let value2;
makeApi1Call(rawValue) {
let aValue = null;
httpModule.request({
url: url1+rawValue,
method: "GET"
})
.then((response) => {
value1 = response.someData
})
.then(() => {
value2 = makeAPIcall2(value1)
}
我更改了您的代码,这样至少您的第二个调用在第一个调用完成之前不会触发。