为什么 Promise 返回一个空字符串?

西尔维娅

我有一个函数 foo ,它发出一个 Ajax 请求。我尝试从回调中返回数据并成功获取带有“xhr.onload”的数据,但得到了带有“xhr.onreadystatechange”的空字符串(“”)。

谁能告诉我为什么??

非常感谢你!

function foo(url){

  return new Promise(function(resolve,reject){
   var xhr = new XMLHttpRequest();
   xhr.open("GET",url,true);
//    xhr.onload = function(){
//     if(xhr.status == 200){             
//         resolve(xhr.responseText);
//         }else{
//          reject("false")
//         }
//    }
   xhr.send();
   xhr.onreadystatechange = function(){
      if(xhr.readyState && xhr.status == 200){             
          resolve(xhr.responseText);
      }else{
          reject("false")
      }

   }
 })

}

foo(url).then(function (data){
   console.log(data)
},function (err){
   console.log(err)
})
TJ克劳德

您的onreadystatechange处理程序不正确。您需要检查readyState值 4(不仅仅是任何真实值),并且您不想拒绝直到readyState4:

  if(xhr.readyState === 4){
      if (xhr.status == 200) { // or xhr.status >= 200 && xhr.status < 300
          resolve(xhr.responseText);
      } else {
          reject("false")
      }
  }

但是对于现代浏览器,您可能会fetch改用它,它已经提供了一个承诺。请确保不要犯这些常见错误(这是我贫血的小博客上的帖子)。

至于为什么你看到了你所看到的,因为你调用了open并且send在附加处理程序之前显然你没有得到readyState1(打开)的回调,所以看起来你得到的第一个回调是在收到标题时(readyState2 ),此时xhr.status将被设置——所以你正在解决你的承诺,但当然,还没有收到请求正文。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Groovy:为什么按空格分割()空字符串会返回一个空字符串的列表?

来自分类Dev

Groovy:为什么按空格split()对一个空字符串进行返回会返回一个空字符串的列表?

来自分类Dev

为什么LayoutObjectNames在FileMaker 14中返回一个空字符串?

来自分类Dev

为什么我的函数返回一个空字符串?

来自分类Dev

为什么`TRegEx.split` 返回一个空字符串作为第一个元素?

来自分类Dev

为什么从promise返回的字符串是不确定的?

来自分类Dev

为什么在for循环中第二次运行函数会返回一个空字符串?

来自分类Dev

为什么在Django模型图像中,Media.url返回一个空字符串,而不是图像链接?

来自分类Dev

为什么串联两个空字符串会导致一个空字符串?

来自分类Dev

当我将一个char添加到空字符串(如“” + c)时,为什么返回一个未知值?

来自分类Dev

为什么我得到一个空字符串?

来自分类Dev

C ++为什么可以初始化一个空字符串数组?

来自分类Dev

为什么element.style.backgroundColor属性会给出一个空字符串?

来自分类Dev

Promise.all([]) 返回一个已解决的 promise,但 Promise.race([]) 返回一个挂起的 promise。他们为什么不同?

来自分类Dev

为什么带有包含捕获组的正则表达式的string.split返回一个以空字符串结尾的数组?

来自分类Dev

为什么不能替换字符串中的所有字符串,而是取回一个空字符串?

来自分类Dev

为什么Promise在.then之后返回为<Pending>?

来自分类Dev

为什么Promise.reject()需要返回?

来自分类Dev

为什么预期该数组为1的阵列回报大小时,一个空字符串传递?

来自分类Dev

为什么这个承诺返回一个[object Promise]而不是值?

来自分类Dev

为什么$'\ 0'或$'\ x0'是一个空字符串?应该是空字符,不是吗?

来自分类Dev

为什么$'\ 0'或$'\ x0'是一个空字符串?应该是空字符,不是吗?

来自分类Dev

cfexecute为什么返回[空字符串]?

来自分类Dev

为什么char * foo()返回空字符串?

来自分类Dev

为什么 glGetProgramInfoLog 返回空字符串?

来自分类Dev

为什么返回值总是空字符串?

来自分类Dev

当我用\\ s split()我的字符串时,为什么我的单词是一个空字符串?

来自分类Dev

为什么getenv()返回一个非常量字符串

来自分类Dev

为什么R.Version()返回一个“语言”字符串?

Related 相关文章

  1. 1

    Groovy:为什么按空格分割()空字符串会返回一个空字符串的列表?

  2. 2

    Groovy:为什么按空格split()对一个空字符串进行返回会返回一个空字符串的列表?

  3. 3

    为什么LayoutObjectNames在FileMaker 14中返回一个空字符串?

  4. 4

    为什么我的函数返回一个空字符串?

  5. 5

    为什么`TRegEx.split` 返回一个空字符串作为第一个元素?

  6. 6

    为什么从promise返回的字符串是不确定的?

  7. 7

    为什么在for循环中第二次运行函数会返回一个空字符串?

  8. 8

    为什么在Django模型图像中,Media.url返回一个空字符串,而不是图像链接?

  9. 9

    为什么串联两个空字符串会导致一个空字符串?

  10. 10

    当我将一个char添加到空字符串(如“” + c)时,为什么返回一个未知值?

  11. 11

    为什么我得到一个空字符串?

  12. 12

    C ++为什么可以初始化一个空字符串数组?

  13. 13

    为什么element.style.backgroundColor属性会给出一个空字符串?

  14. 14

    Promise.all([]) 返回一个已解决的 promise,但 Promise.race([]) 返回一个挂起的 promise。他们为什么不同?

  15. 15

    为什么带有包含捕获组的正则表达式的string.split返回一个以空字符串结尾的数组?

  16. 16

    为什么不能替换字符串中的所有字符串,而是取回一个空字符串?

  17. 17

    为什么Promise在.then之后返回为<Pending>?

  18. 18

    为什么Promise.reject()需要返回?

  19. 19

    为什么预期该数组为1的阵列回报大小时,一个空字符串传递?

  20. 20

    为什么这个承诺返回一个[object Promise]而不是值?

  21. 21

    为什么$'\ 0'或$'\ x0'是一个空字符串?应该是空字符,不是吗?

  22. 22

    为什么$'\ 0'或$'\ x0'是一个空字符串?应该是空字符,不是吗?

  23. 23

    cfexecute为什么返回[空字符串]?

  24. 24

    为什么char * foo()返回空字符串?

  25. 25

    为什么 glGetProgramInfoLog 返回空字符串?

  26. 26

    为什么返回值总是空字符串?

  27. 27

    当我用\\ s split()我的字符串时,为什么我的单词是一个空字符串?

  28. 28

    为什么getenv()返回一个非常量字符串

  29. 29

    为什么R.Version()返回一个“语言”字符串?

热门标签

归档