2016-07-20 2 views
0

Я пытаюсь отклонить обещание, как описано в документации API-структуры, используемой мной (стек Apollo), но в ней нет примера, в ней указано только, что у меня есть отклонить обещание, если есть ошибка, и я пытаюсь избавиться от раздражающего сообщения YellowBox «Предупреждение: возможно, отказ от неподготовленного обещания» при попытке моего приложения без подключения к Интернету.Возможное необработанное отклонение обещания

Мой метод действительно работает, он переходит к catch, и он показывает сообщение об ошибке, но я продолжаю получать раздражающее сообщение YellowBox, вот что я пытаюсь исправить.

первое, что я сделал, идет в улове, как и ожидалось, но он выводит сообщение YellowBox Warning: Possible unhandled promise rejection...

return client.query({ query: gql`...`, }).then((data) => { 
    console.log(data); 
    data; 
}).catch((error) => { 
    console.log(error); 
    error; 
}); 

Последнее, что я пробовал:

var promise = new Promise(function(resolve, reject) { 
    //async call, client.query(..) "returns a promise that should be rejected 
    //if there is an error message..." 
    client.query({ query: gql`...`, }).then(({data}) => { 
    console.log(data); 
    resolve(data); 
    }).catch((error) => { 
    console.log(error); // goes right here, works. 
    reject(error.message); 
    }); 
}); 
//just trying this out 
promise.then((data) => { 
    console.log(data); 
}).catch((error) => { 
    console.log(error); 
}); 

Кроме того, добавление тега Метеор, потому что не мог найти Аполлон, но это почти то же самое.

Стараясь больше материала, как это предлагается в ответы и комментарии:

var promise = new Promise(function(resolve, reject) { 
    client.query({ 
    query: gql`...`, 
    }).then(({data}) => { 
    console.log(data); 
    resolve(data); 
    }).catch((error) => { 
    reject(error.message); 
    }); 
}, (error) => { 
    console.log(error); 
}); 

другой:

var callback = { 
    success: function(data) { 
    console.log("SUCCESS"); 
    }, 
    error: function(data) { 
    console.log("ERROR"); 
    } 
}; 

var promise = new Promise(function(resolve, reject) { 
    client.query({ 
    query: gql`...`, 
    }).then(({data}) => { 
    console.log(data); 
    resolve(data); 
    }).catch((error) => { 
    console.log(error); 
    reject(error.message); 
    }); 
    return promise; 
}); 
promise.then(callback.success, callback.error); 

другой:

client.query({ 
    query: gql`...`, 
}).then(({data}) => { 
    console.log(data); 
}, (error) => { 
    console.log(error); 
}); 

ApolloStack: http://docs.apollostack.com/apollo-client/network.html он говорит, что возвращает обещание который должен быть отклонен при возникновении ошибки.

YellowBox обнаруживает необработанные обещания и такие вещи и бросает предупреждения.

+0

[.then()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) принимает второй аргумент, функция, которая занимается с отказом –

+0

Да, я уже пробовал пропустить функцию там, позвольте мне попробовать еще раз – octohedron

+0

Вы добавили его в неправильное место, вы добавили его как второй аргумент в конструктор 'Promise', а не' .then() ', должны быть похожи : '.then (() => {},() => {})' Но это может быть неважно, где это сообщение «YellowBox» _? в консоли Dev Tools? –

ответ

0

Найденный проблема, на данный момент работает над ней, исправление скоро появится, поэтому на данный момент нет правильного ответа.

Скопируйте-вставьте правильный путь (как показано в вопросе). Он также скопирован из документации официальных фреймворков, которая показывает, как это сделать, поэтому следующий человек, пришедший с той же проблемой, будет знать, что им придется подождать пару дней, пока они не исправят это.

client.query({ query: gql`...`, }).then((data) => { 
    console.log(data); 
}).catch((error) => { 
    console.log(error); 
}); 
+0

Можете ли вы связать ошибку? отчет? – Bergi

+1

Несомненно, https://github.com/apollostack/apollo-client/issues/423 – octohedron

-1

пытаются обрабатывать ошибку в отклонении обратного вызова, а не поймать обратного вызова:

var promise = new Promise(function(resolve, reject) { 

    client.query({ query: gql`...`, }).then(({data}) => { 
     console.log(data); 
     resolve(data); 
    }, (error)=>{ 
     console.log(error); // goes right here, works. 
     reject(error.message); 
    }) 
}); 
+0

обновленный вопрос с вашим предложением, не работал. – octohedron

+0

вы помещаете обратный вызов отклонения в неправильном месте, его следует передать в качестве второго аргумента в 'client.query ({...}). Then()', а не 'new Promise()' – MarkoCen

1

Там нет причин, чтобы создать обещание, если client.query сделает это за вас ...

// no new Promise here, just make the query 

return client.query({ query: gql`...`, }).then((data) => { 
    console.log(data); 
    data; 
}).catch((error) => { 
    console.log(error); 
    error; 
}); 
Смежные вопросы