JS链式Promise代码语法改变了运行顺序 - 为什么?

时间:2017-12-20 21:25:35

标签: javascript promise

我正在尝试使用链式承诺来运行异步进程。

我从这开始:

var dataStore = {};
DBCalls.GetAllProjects()
.then((data) => ProcessData.StoreProjects(data,dataStore))
.then(ProcessData.DoStuff(dataStore))

上面在StoreProjects函数之前完成了DoStuff函数。 (以错误的顺序运行)

var dataStore = {};
DBCalls.GetAllProjects()
.then((data) => ProcessData.StoreProjects(data,dataStore))
.then(() => {ProcessData.DoStuff(dataStore)})

以正确的顺序运行该功能。

有人能解释一下语法上的差异吗?

是因为StoreProjects Resolve没有返回任何内容并且回调签名不同吗?

额外信息: 使用的所有函数都返回promise。

1 个答案:

答案 0 :(得分:0)

如果你的函数返回promises,你应该在promise处理程序中使用return语句,如果你想在转移到链中的下一个处理程序之前等待promise的解析。

var dataStore = {};
return DBCalls.GetAllProjects()
  .then((data) => { return ProcessData.StoreProjects(data, dataStore); })
  .then(() => { return ProcessData.DoStuff(dataStore); })