我最近一直在摆弄getch()
api,并注意到一些有点古怪的东西。
let url = "http://jsonplaceholder.typicode.com/posts/6";
let iterator = fetch(url);
iterator
.then(response => {
return {
data: response.json(),
status: response.status
}
})
.then(post => document.write(post.data));
;
post。数据
返回一个promise
对象。http://jsbin.com/wofulo/2/edit?js输出
但是,如果写为:
let url = "http://jsonplaceholder.typicode.com/posts/6";
let iterator = fetch(url);
iterator
.then(response => response.json())
.then(post => document.write(post.title));
;
post
这里是一个标准的Object
,您可以访问title属性
所以我的问题是:为什么response.json
在对象文本中返回一个promise,但是如果刚刚返回,则返回值?
另外,帮助我理解您描述的这个特定场景的是Promise API文档,特别是其中解释了如何根据处理程序fn返回的内容,以不同方式解析then
方法返回的promised:
如果处理程序函数:
这种差异是由于promise的行为造成的,而不是具体的fetch()
。
当回调返回一个额外的Promise时,链中的下一个回调基本上绑定到该Promise,接收其解决或拒绝实现和值。
第二段也可以写成:
iterator.then(response =>
response.json().then(post => document.write(post.title))
);
在这个表单和你的表单中,post
的值由从response.json()
返回的Promise提供。
但是,当返回一个普通的Object
时,. so()
认为结果是成功的,并立即自行解决,类似于:
iterator.then(response =>
Promise.resolve({
data: response.json(),
status: response.status
})
.then(post => document.write(post.data))
);
在本例中,post
只是您创建的对象,它在其
数据
属性中持有Promise
。等待这一promise实现的过程仍然是不完整的。
为什么response.json
返回一个promise?
因为一旦所有标头到达,您就会收到响应
。调用. json()
将为尚未加载的超文本传输协议响应体获取另一个promise。另请参阅为什么来自JavaScript获取API的响应对象是一个promise?。
如果我从then
处理程序返回promise,为什么要获取该值?
因为promise就是这样。从回调返回promise并让它们被采纳的能力是它们最相关的特性,它使它们无需嵌套即可链接。
你可以用
fetch(url).then(response =>
response.json().then(data => ({
data: data,
status: response.status
})
).then(res => {
console.log(res.status, res.data.title)
}));
或者任何其他访问先前promise的方法都会在等待json主体后产生一个. so()链来获取响应状态。
问题内容: 我尝试在两种情况下执行T-SQL查询(我使用Win7,python 3.2,MS SQL Server Express 2008,适用于python 3.2的pyodbc): -情况1: 使用MS SQL Server Management Studio,我尝试执行查询: 返回成功结果 情况2: 但是运行代码后,我收到错误消息 如果我没有运行代码 我没有收到任何错误。但为什么? 问题答
在Go语言中有flag.String()函数,请问下: 1、flag.String()返回的是什么呢? 为何需要这样来返回? 2、countryCodeFile 不是一个字符串吗?
问题内容: 我最近一直在搞弄api,发现有些奇怪的地方。 返回一个对象。输出 但是,如果将其写为: 这是您可以访问标题属性的标准。 所以我的问题是:为什么要在对象文字中返回一个promise,但是如果刚返回则返回一个值? 问题答案: 为什么要兑现承诺? 因为您在所有标头到达后立即收到。调用使您对尚未加载的http响应的正文有了另一个保证。另请参见[为什么来自JavaScriptfetch API的
根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果:
问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么
本文向大家介绍Math.min() < Math.max() 返回结果是什么?为什么?相关面试题,主要包含被问及Math.min() < Math.max() 返回结果是什么?为什么?时的应答技巧和注意事项,需要的朋友参考一下 返回,因为返回,返回。 猜测的实现方式大致如下: 接受不定项参数,当参数只有一个的时候,例如,那么这个需要和(js中最小的数)进行比较,所以结果返回,哪怕传入的值再小,单个