2016-11-28 2 views
1

Ich kam mit dieser Art von Netzwerkoperationen mit ApolloClient, aber das Problem ist, dass der Code sehr hässlich und schwer zu lesen, wenn ich Dutzende von Abfragen wie folgt zu schreiben, wird es ermüdend und nicht zu pflegen .ApolloClient Timeout beste Option

Ich habe nichts in den Apollo-Dokumenten oder dem tatsächlichen Code gefunden, um das Zeitlimit zu konfigurieren.

let query = gql` 
    query ... { 
}`; 
let x = 0; 
let timer = setTimeout(() => { 
    if (x === 0) { 
    console.log('error'); 
    } 
    x = 1; 
}, 3000); 
ApolloClient.query({ query }).then(({data}) => { 
    clearTimeout(timer); 
    if (x === 0) { 
    if (data.result) { 
     console.log(data.result) 
    } else { 
     console.log('error'); 
    } 
    } 
}).catch((error) => { 
    clearTimeout(timer); 
    console.log('error') 
}); 

Gibt es eine bessere Möglichkeit, das gleiche Ergebnis mit weniger und einfacherem Code zu erreichen?

Antwort

0

Es stellte sich heraus, können Sie die Methode außer Kraft setzen:

export async function query(request) { 
    const options = {...this._opts}; 
    return new Promise((resolve, reject) => { 
    setTimeout(() => reject('Network timed out'), 1e4); // 10 sec 
    return this.applyMiddlewares({ 
     request, 
     options 
    }).then((rao) => { 
     return this.fetchFromRemoteEndpoint.call(this, rao); 
    }).then(response => this.applyAfterwares({ 
     response: response, 
     options 
    })).then(({response}) => (response).json()).then((payload) => { 
     resolve(payload); 
    }).catch((e) => { 
     reject(e); 
    }); 
    }).catch((e) => { 
    console.log(e); 
    return null; 
    }); 
} 
Verwandte Themen