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);
  });
};
相关文章
|
5月前
|
JSON 前端开发 JavaScript
async/await的应用
async/await的应用
30 0
|
7月前
|
前端开发 JavaScript
|
20天前
|
前端开发 JavaScript
async/await
async/await
16 0
|
1天前
|
前端开发
async、await
async、await
|
3月前
|
前端开发 JavaScript
|
8月前
|
前端开发 API
Async/Await 在何时该使用,何时不使用
使用 async/await 是在处理异步操作时的一种更简洁、易读的方式,它基于 Promise,并且可以使异步代码看起来像同步代码一样编写。然而,并不是所有情况下都需要使用 async/await。
104 0
|
8月前
|
前端开发 JavaScript 开发者
|
前端开发
你需要了解的ES7的async/await
你需要了解的ES7的async/await
|
前端开发
async/await实现Promise.acll()
Promise.all() 方法接收一个 promise 的 iterable 类型(注:Array,Map,Set 都属于 ES6 的 iterable 类型)的输入,并且**只返回一个Promise实例**,并且**输入的所有 promise 的 resolve 回调的结果是一个数组**。
77 2
async/await实现Promise.acll()
|
前端开发
async/await详解
async/await详解
256 0
async/await详解