有两个fetch语句,我想只在响应来自第一个后执行第二个 - >
function CreateRide(userId){
const baseUrl = "138.197.99.29:7000/createRide";
var reqObj = {};
var responseObj = {"success":false};
let url = 'http://138.197.99.29:7000/createRide?lat=122.254&lng=14.144&vehicleID=vufn414&time=test';
fetch(url)
.then((resp) => resp.json())
.then(function (data) {
responseObj.success = true;
console.log(data.rideID);
return data.rideID;
})
.catch(function (error) {
responseObj.success = false;
console.log(error)
})
}
和 - >
function StartRide(rideId){
const baseUrl = "138.197.99.29:7000/createRide";
var reqObj = {};
var responseObj = {"success":false};
let url = 'http://138.197.99.29:7000/startRide?rideID=' + rideId;
fetch(url)
.then((resp) => resp.json())
.then(function (data) {
responseObj.success = true;
console.log(data);
return data.success;
})
.catch(function (error) {
responseObj.success = false;
console.log(error)
})
}
我希望在响应来自CreateRide
之后执行StartRide答案 0 :(得分:1)
使用CreateRide
中的承诺,但返回调用fetch().then().catch()
的结果,以便您可以使用调用该函数的链。然后使用
CreateRide(/*...*/).then(result => StartRide(/*...*/)).catch(/*...error handler...*/);
您可以在此处添加return
:
function CreateRide(userId){
const baseUrl = "138.197.99.29:7000/createRide";
var reqObj = {};
var responseObj = {"success":false};
let url = 'http://138.197.99.29:7000/createRide?lat=122.254&lng=14.144&vehicleID=vufn414&time=test';
return fetch(url) // <=======
.then((resp) => resp.json())
.then(function (data) {
responseObj.success = true;
console.log(data.rideID);
return data.rideID;
})
.catch(function (error) {
responseObj.success = false;
console.log(error)
})
}
旁注:这是有点的风格/辩论问题,但也考虑没有CreateRide
吃错误;相反,传播错误(例如,在返回承诺时,没有catch
),然后在最外层处理错误。
附注2:同样是一种风格,但绝大多数,在JavaScript中,惯例是非构造函数的函数以小写字母开头,例如createRide
和startRide
。