ES7 async await return value

简介: ES7 async await return value

image.png

事情是这样的,用 Node 写了一个接口函数,由于通信需要(使用 crossbar.io ),接口函数必须通过 return 的方式将数据返回,调用方得到数据。例如下面的这个例子

// 接口函数名称 api,有一个变量,传递到 testFun 函数里,然后结果赋值后,然后到最外部使用 return 返回数据
function api() {
  let value = null;
  testFun(value);
  return value;
}
function testFun(value) {
  // do something
  value = resultData;
}

这种操作看起来正常,接口经调用测试后发现,结果为 null ?哪的原因,又看了看代码,原来 testFun 里面有异步操作,testFun 是一个异步函数,结果直接返回了,那么加个延迟看看效果,改成下面这样 ( testFun 改成 asyncFun )

function api() {
  let value = null;
  asyncFun(value);
  setTimeout(() => {
    console.log(value);
    return value;    
  }, 2000);  
}
function asyncFun(value) {
  // do something
  value = resultData;
}

加上两秒延迟后, value 的数据正确得到了,发现调用方的接口为 null , 查了一下原因,不能使用 setTimeout 的方式 return 返回数据,好吧,再换写法。

异步函数的执行完以后,直接进行 return ,如下

function api() {
  let value = null;
  return asyncFun(value);
}
function asyncFun(value) {
  // do something
  value = resultData;
  return value;
}

看似没问题,接口调用一下,结果 undefined ,问题好像有点严重了,异步操作最后返回在目前的 crossbar.io 接口写法中哪有问题?找下资料再好好研究一下,找了好多,也看了好多, 回调函数,事件监听,发布 / 订阅, Promise ,Generator , async 等等这些都看了一遍,能用的也都挨个用了一遍,最后使用 ES7 async 搞定,贴代码

let api = async (Data) => {
  let resultData = await asyncFun(Data);
  return resultData;
};
let asyncFun = (Data) => {
  return new Promise((res, rej) => {
    let result = null;
    ...
    // 异步操作 赋值给 result
    ...
    res(result);
  });
};
目录
相关文章
|
6月前
|
前端开发 JavaScript
什么是 async、await ?
什么是 async、await ?
|
前端开发 JavaScript
|
17天前
|
JSON 前端开发 API
es6 中await的用法
es6 中await的用法
|
6月前
|
前端开发 JavaScript 开发者
阿珊带你深入理解 async/await 函数
阿珊带你深入理解 async/await 函数
|
6月前
|
JSON 前端开发 JavaScript
什么是async和await?
什么是async和await?
54 0
|
6月前
|
前端开发 JavaScript
|
前端开发 JavaScript 开发者
|
小程序 前端开发
小程序里使用es7的async await语法
小程序里使用es7的async await语法
121 0
|
前端开发
async/await实现Promise.acll()
Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且**只返回一个Promise实例**,并且**输入的所有 promise 的 resolve 回调的结果是一个数组**。
99 2
async/await实现Promise.acll()
|
消息中间件 前端开发 JavaScript
ES8 中的 async/await —— 异步函数
ES8 中的 async/await —— 异步函数
196 0