链接与异步函数同步的工作流程与promises

时间:2015-07-01 23:13:30

标签: javascript asynchronous promise

如果我使用promises链接同步和异步函数,工作流程是什么样的?

案例1:

synchronousFunc(x).then(asynchronousFunc(resultOfSynchronousFunc));

synchronousFunc(x)的

| ---------- |

asynchronousFunc(未定义)

| --------------- |

案例2:

asynchronousFunc(x).then(synchronousFunc(resultOfAsynchronousFunc));

asynchronousFunc(x)的

| -------- |

synchronousFunc(未定义)

| ------------- |

案例3:

 asynchronousFunc(x).then(function(){
  return synchronousFunc(resultOfAsynchronousFunc);
 });

asynchronousFunc(x)的

| --------- |

............ synchronousFunc(resultOfAsynchronousFunc)

............ | -------------------- |

案例4:

 synchronousFunc(x).then(function(){
  return asynchronousFunc(resultOfSynchronousFunc);
 });

synchronousFunc(x)的

| --------- |

asynchronousFunc(未定义)

| ------------ |

1 个答案:

答案 0 :(得分:0)

让put异步函数是一个返回promise(或then - 能对象的函数,参见MDN)。同步函数是一个返回任何其他结果的函数(不可用)。

异步函数返回promise “immediate”,即在promise被解析之前(promise状态为“pending”then尚未被调用)。

funcSync(x).then(funcAsync) // Error if `funcSync` returns object without `then` method.

// Should be:

var res = funcSync(x);
var promise = funcAsync(res);

promise.then(..)作为参数接受函数,该函数对异步函数的结果起作用:fetchDataAsync.then( data => {..} ) 案例2应该是:

fetchDataAsync(x).then(processDataSync);

修复所有案件真是太平凡了,请阅读MDN