_handleQuerySuccess(result: QueryResult): void { this._fetchedQuery = true; throwFailedPromise( this._storeData .getTaskQueue() .enqueue(() => { const response = result.response; invariant( response && typeof response === 'object', 'RelayPendingQueryTracker: Expected response to be an object, got ' + '`%s`.', response ? typeof response : response, ); this._storeData.handleQueryPayload( this._query, response, this._forceIndex, ); }) .then( this._markQueryAsResolved.bind(this), this._markAsRejected.bind(this), ), ); }
sendMutation(mutationRequest: RelayMutationRequest): void { const implementation = this._getImplementation(); this._subscribers.forEach(({mutationCallback}) => { if (mutationCallback) { mutationCallback(mutationRequest); } }); const maybePromise = implementation.sendMutation(mutationRequest); if (maybePromise) { throwFailedPromise(Promise.resolve(maybePromise)); } }
sendQueries(queryRequests: Array<RelayQueryRequest>): void { profileQueue(queryRequests); const implementation = this._getImplementation(); this._subscribers.forEach(({queryCallback}) => { if (queryCallback) { queryRequests.forEach(request => { // $FlowIssue #10907496 queryCallback was checked above queryCallback(request); }); } }); const maybePromise = implementation.sendQueries(queryRequests); if (maybePromise) { throwFailedPromise(Promise.resolve(maybePromise)); } }
constructor( {fetchMode, forceIndex, query}: PendingQueryParameters, { pendingFetchMap, preloadQueryMap, storeData, }: { pendingFetchMap: {[queryID: string]: PendingState}, preloadQueryMap: PromiseMap<Object, Error>, storeData: RelayStoreData, }, ) { const queryID = query.getID(); this._forceIndex = forceIndex; this._pendingFetchMap = pendingFetchMap; this._preloadQueryMap = preloadQueryMap; this._query = query; this._resolvedDeferred = new Deferred(); this._resolvedQuery = false; this._storeData = storeData; this._fetchQueryPromise = fetchMode === RelayFetchMode.PRELOAD ? this._preloadQueryMap.get(queryID) : storeData.getNetworkLayer().fetchRelayQuery(query); this._fetchedQuery = false; this._error = null; this._pendingFetchMap[queryID] = { fetch: this, query: query, }; throwFailedPromise( this._fetchQueryPromise.then( this._handleQuerySuccess.bind(this), this._handleQueryFailure.bind(this), ), ); }