Discuss
/
JavaScript
/
Promise 对象
Promise 对象
Topic sourcep.then 会根据 p 的PromiseResult选择调用回调函数,并将之前调用f获得的内容专递给相应回调函数。
// promise
let url = "https://get.geojs.io/v1/ip/country.json?ip=223.5.5.5"
fetch(url)
.then(
response => {
console.log(response.status);
let json = response.json()
console.log(json);// Promise object
return json;
},
err => {
return new Promise((resolve, reject) => reject(err.message));
}
)
.then(
data => {
console.log(data)
},
err => console.log("hi:", err.message || err)
)
// .catch(err => console.error('Error:', err))
- 1
Junes_99994
浏览器前端显示进程(render process)里有很多线程,其中执行js代码的是主线程(main thread,MT)
通过异步(async)方法,可以将当前任务交给其他线程(或进程)如网络线程(network thread,NT)并行处理。
如上过程很简单
MT 请求查询ip=223.5.5.5归属地
NT 尝试获取,得到两种可能结果:完成 或 失败(如拔网线,缺省部分链接资源地址)
MT将fetch的结果包装到Promise对象p1中,选择执行其后then中的两个函数,并再次将结果包装到p2中
MT调用p2的then方法,显示状态内容
Promise 是一个语法糖,它可以将一个异步操作结束时的状态(成败)、对应的数据打包,再通过promise.then,将对应的处理函数也捆绑上去。
Promise 方法以一个函数f为参数,当创建一个Promise对象 p 后,p 调用 f(resolve, reject),resolve和reject这两个函数会将其在函数 f 中接受到的内容专递给Promise对象的PromiseResult属性,并更新PromiseState——如果调用的是resolve则为'fulfilled',反之为'rejected' 。如果谁都没有调用,则为'pending'等待中。如果在f中多次重复调用这两函数,则最先调用的函数有效,之后的无效。
p.then 会根据