Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我会得到;未兑现的(承诺中的)“;那你错了吗?_Javascript_Asynchronous_Promise - Fatal编程技术网

Javascript 为什么我会得到;未兑现的(承诺中的)“;那你错了吗?

Javascript 为什么我会得到;未兑现的(承诺中的)“;那你错了吗?,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,所以我有一系列的,然后: ngOnInit(){ this.contentfulService.getExamples() .然后(展品=>此。展品=展品) .then(expensions=>{console.log(“0”,expensions[0])) .then(附件=>{console.log(“1”,附件[1])); }您没有从第一个返回任何内容。然后将返回到第二个,因此展品将不存在于第二个中。然后(第三个也不存在) 您应该先从返回它,然后再从返回,或者从this.expensio

所以我有一系列的
,然后

ngOnInit(){
this.contentfulService.getExamples()
.然后(展品=>此。展品=展品)
.then(expensions=>{console.log(“0”,expensions[0]))
.then(附件=>{console.log(“1”,附件[1]));

}
您没有从第一个
返回任何内容。然后将
返回到第二个
,因此
展品将不存在于第二个
中。然后
(第三个也不存在)

您应该先从
返回它,然后再从
返回,或者从
this.expensions
记录它

大概是这样的:

ngOnInit() {
  this.contentfulService.getExhibits()
    .then(exhibits => {
      this.exhibits = exhibits
      return exhibits
    })
    .then(exhibits => {
      console.log("0", exhibits[0])
      return exhibits
    })
    .then(exhibits => {
      console.log("1", exhibits[1])
    });
}
或者更好

ngOnInit() {
  this.contentfulService.getExhibits()
    .then(exhibits => this.exhibits = exhibits)
    .then(exhibits => console.log("0", this.exhibits[0]))
    .then(exhibits => console.log("1", this.exhibits[1]));
}
这里有几个问题:

您已分配
this.exhies=exhies
,但未返回任何内容。因此,在下一个
.then()
中,无法访问展品
,从而导致问题。您可以按如下方式返回:

.then(exhibits => {
    this.exhibits = exhibits
    return exhibits
})
虽然这可能不需要,因为您没有在任何地方使用
this.expensions
。因此,您只需返回
展品
,如下所示:

.then(exhibits => exhibits)
虽然这也是不必要的,您可以简单地将其删除,然后访问
展品
阵列,如:

this.contentfulService.getExhibits()
  .then(exhibits => {
    if(exhibits && exhibits.length){
      console.log("0", exhibits[0] || {})
      console.log("1", exhibits[1] || {})
    }       
  })
或者,如果您在其他地方使用
this.expensions
,则可以使用:

this.contentfulService.getExhibits()
  .then(exhibits => {
    this.exhibits = exhibits
    return exhibits
  })
  .then(exhibits => {
    if (exhibits && exhibits.length) {
      console.log("0", exhibits[0] || {})
      console.log("1", exhibits[1] || {})
    }
  })

此外,在进行ajax调用时,始终使用正确的错误处理,即
捕获
,这对于完成新操作非常有用,即使在ajax调用在链中失败之后,也很有用,如:

this.contentfulService.getExhibits()
  .then(exhibits => {
    this.exhibits = exhibits
    return exhibits
  })
  .then(exhibits => {
    if (exhibits && exhibits.length) {
      console.log("0", exhibits[0] || {})
      console.log("1", exhibits[1] || {})
    }
  }).catch((error) => {
    console.error("Error: " + error);
  })

需要在then函数中返回值,以使其在下次回调中可用。