.then异步后的数据如何返回

场景:假如我们在onload状态下,想要获取Promise异步后的数据来改变数据!

先上实现方法

第一段

methods: {
  	async a(aid,channlid) {
  	   let b=""//这里必须先设置
		 await ajaxview(aid,channlid).then(res => {
					if (res.data.data) {
						b=res.data.data
					}
				  })
				  return b //返回结果
  	}

}

第2段

onLoad(){
	this.a(13,1).then(v=>{
		this.content=v
			})
		},

先讲下async await

async

async function a() {
    	return "haha"
    }
    a();

image.png

这时候我们可以发现,他返回的是一个Promise对象了!

await

官方说法:因为 async 函数返回一个 Promise 对象,所以 await 可以用于等待一个 async 函数的返回值——这也可以说是 await 在等 async 函数,但要清楚,它等的实际是一个返回值。注意到 await 不仅仅用于等 Promise 对象,它可以等任意表达式的结果,所以,await 后面实际是可以接普通函数调用或者直接量的。

如果await 等到的不是一个 Promise 对象,那 await 表达式的运算结果就是它等到的东西。

如果它等到的是一个 Promise 对象,await 就忙起来了,它会阻塞后面的代码,等着 Promise 对象 resolve,然后得到 resolve 的值,作为 await 表达式的运算结果。

没错阻塞我们如果需要获取Promise .then后的值,就必须要阻塞后再返回!

我们接下来看第一段代码!

async a(aid,channlid) {
  	         let b=""//这里必须先设置
		 await ajaxview(aid,channlid).then(res => { //ajaxview是封装的Promise函数,获取返回值,没啥好说的!
					if (res.data.data) {
					// 下面我们看 await 就是利用阻塞
					// 等执行完毕后再改变b的值,所以后面才能return 出去,
					// 不然是异步的,返回的肯定是个空置
						b=res.data.data 
					}
				  })
				  return b //await阻塞后得到的值再返回
  	}

接下里我们再看第二段!

this.a(13,1).then(v=>{
		this.content=v
		})

第二段就简单了!我们上面说了async返回的是一个Promise对象

我们直接利用.then链接下把他的值改变就行了!



相关内容

发表评论

验证码:
点击我更换图片

最新评论