js怎样确定两个异步函数的执行顺序
```
const asyncFunction = function() {
  return new Promise(function(resolve, reject) {
    resolve('promise');
  });
};

asyncFunction().then(value => console.log(value));

setTimeout(() => { console.log('settimeout') }, 0);

```
输出
```
// promise
// settimeout
```
请问两个都是异步的函数，为什么`setTimeout`函数后执行？
Promise 是microtask 队列
而setTimeout属于 macrotask 队列
在一个Tasks执行之后会立刻执行microtask队列，而后执行macrotask队列
macrotask永远在 microtask 之后执行