如果我使用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(未定义)
| ------------ |
答案 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。