如何在Javascript之前的fetch调用响应之后调用另一个fetch?

时间:2017-07-09 11:02:51

标签: javascript reactjs react-native

有两个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

1 个答案:

答案 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中,惯例是非构造函数的函数以小写字母开头,例如createRidestartRide