【发布时间】:2020-01-15 04:12:45
【问题描述】:
我正在努力拨打按钮单击时将值传递给 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”(我仍在学习)方法?
【问题讨论】:
-
如果
makeApi1Call返回了httpModule.request返回的Promise,那么你可以简单地使用Promise链 -
你能详细说明一下吗?我真的在为 Promises、回调而苦苦挣扎。我明白了这个概念,但我似乎无法拼凑出一个来挽救我的生命。
-
看看
httpModule.request({ ... }).then((response) => {是一个Promise链......和return如何从函数返回一个值 -
我认为,在解析数据之后,返回之前,只需在第一次内进行后续 XHR 调用即可
-
了解所有关于 Promises 的知识,你可以使用这个link。一旦你理解了 Promise,你就可以轻松处理异步请求了。
标签: javascript nativescript nativescript-vue