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);
  });
};
目录
相关文章
|
7月前
|
前端开发 JavaScript
什么是 async、await ?
什么是 async、await ?
|
JSON 前端开发 JavaScript
async/await的应用
async/await的应用
66 0
|
前端开发 JavaScript
|
7月前
|
前端开发 JavaScript
async/await
async/await
41 0
|
7月前
|
前端开发 JavaScript
|
前端开发 API
Async/Await 在何时该使用,何时不使用
使用 async/await 是在处理异步操作时的一种更简洁、易读的方式,它基于 Promise,并且可以使异步代码看起来像同步代码一样编写。然而,并不是所有情况下都需要使用 async/await。
220 0
|
前端开发 JavaScript 开发者
|
消息中间件 前端开发 JavaScript
ES8 中的 async/await —— 异步函数
ES8 中的 async/await —— 异步函数
203 0
|
前端开发
async/await详解
async/await详解
326 0
async/await详解
|
前端开发 JavaScript API
async-await
JS查漏补缺系列是我在学习JS高级语法时做的笔记,通过实践费曼学习法进一步加深自己对其的理解,也希望别人能通过我的笔记能学习到相关的知识点。这一次我们来了解JavaScript的async-await
114 0