首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可能未处理的拒绝承诺

可能未处理的拒绝承诺
EN

Stack Overflow用户
提问于 2016-07-20 18:09:26
回答 3查看 8.5K关注 0票数 0

我试图拒绝我正在使用的框架(阿波罗堆栈)的API文档中所解释的承诺,但它没有显示一个示例,它只是说明如果有错误,我必须拒绝承诺,并且我正在尝试在没有互联网连接的情况下尝试我的应用程序时消除恼人的YellowBox消息“警告:可能的未完成的承诺拒绝”。

我的方法实际上是有效的,它会找到捕获并显示错误消息,但是我一直得到恼人的YellowBox消息,这就是我想要修复的。

我做的第一件事,就像预期的那样进入捕获,但是它显示了一个YellowBox消息Warning: Possible unhandled promise rejection...

代码语言:javascript
复制
return client.query({ query: gql`...`, }).then((data) => {
    console.log(data);
    data;
}).catch((error) => {
    console.log(error);
    error;
});

我最后一次尝试的是:

代码语言:javascript
复制
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); 
});

另外,加入流星标记是因为找不到阿波罗,但这几乎是一回事。

如答案和评论中所建议的那样,尝试更多的东西:

代码语言:javascript
复制
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);
});

另一个:

代码语言:javascript
复制
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);

另一个:

代码语言:javascript
复制
client.query({
  query: gql`...`,
}).then(({data}) => {
  console.log(data);
}, (error) => {
  console.log(error);
});

ApolloStack:http://docs.apollostack.com/apollo-client/network.html,它说,这会返回一个承诺,如果发生错误,就应该拒绝它。

YellowBox检测未处理的承诺和诸如此类的事情并抛出警告。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-21 06:19:53

发现了这个问题,目前框架正在着手解决,很快就会有一个解决方案,所以目前还没有正确的答案。

我会以正确的方式复制粘贴(如问题所示)。它也是从官方框架的文档中复制出来的,这些文档展示了如何解决这个问题,因此下一个出现同样问题的人将知道他们需要等待几天才能修复。

代码语言:javascript
复制
client.query({ query: gql`...`, }).then((data) => {
    console.log(data);
}).catch((error) => {
    console.log(error);
});
票数 0
EN

Stack Overflow用户

发布于 2016-07-20 18:24:42

如果client.query为你做了这件事,就没有理由做出承诺.

代码语言:javascript
复制
// 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;
});
票数 1
EN

Stack Overflow用户

发布于 2016-07-20 18:14:06

尝试处理拒绝回调中的错误,而不是catch回调:

代码语言:javascript
复制
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);
    })
 });
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38487834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档