我试图拒绝我正在使用的框架(阿波罗堆栈)的API文档中所解释的承诺,但它没有显示一个示例,它只是说明如果有错误,我必须拒绝承诺,并且我正在尝试在没有互联网连接的情况下尝试我的应用程序时消除恼人的YellowBox消息“警告:可能的未完成的承诺拒绝”。
我的方法实际上是有效的,它会找到捕获并显示错误消息,但是我一直得到恼人的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检测未处理的承诺和诸如此类的事情并抛出警告。
发布于 2016-07-21 06:19:53
发现了这个问题,目前框架正在着手解决,很快就会有一个解决方案,所以目前还没有正确的答案。
我会以正确的方式复制粘贴(如问题所示)。它也是从官方框架的文档中复制出来的,这些文档展示了如何解决这个问题,因此下一个出现同样问题的人将知道他们需要等待几天才能修复。
client.query({ query: gql`...`, }).then((data) => {
console.log(data);
}).catch((error) => {
console.log(error);
});发布于 2016-07-20 18:24:42
如果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;
});发布于 2016-07-20 18:14:06
尝试处理拒绝回调中的错误,而不是catch回调:
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);
})
});https://stackoverflow.com/questions/38487834
复制相似问题