如何使用promise做序列任务?

Sat*_*ato 1 javascript node.js promise bluebird

所以,我有4项任务:getStatus(),updateStatus(A),getTask(),updateTask(),它应该以这种方式执行:

getStatus(function(status) {
  // A
  updateStatus(status, function(status) {
    // B
    getTask(function(task) {
      // C
      updateTask(task, function(task) {
        // D
      })
    })
  })
})
Run Code Online (Sandbox Code Playgroud)

所以为了避免回调地狱,我用了诺言,现在所有这四个任务都返回了一个Promise,然后我改成了这个方式

getStatus().then(function(status) {
  // A
  updateStatus(status).then(function(status) {
    // B
    getTask().then(function(task) {
      // C
      updateTask(task).then(function(task) {
        //D
      })
    })
  }) 
}) 
Run Code Online (Sandbox Code Playgroud)

如你所见,它仍然有then hell,

我对Promise做错了吗?

Ry-*_*Ry- 5

如果您不需要status在C和D中使用,这种使用.then将导致一个解析为task:

getStatus()
    .then(updateStatus)
    .then(() => getTask())
    .then(updateTask)
Run Code Online (Sandbox Code Playgroud)

还有async/await:

const status = await getStatus();
await updateStatus(status);

const task = await getTask();
await updateTask(task);
Run Code Online (Sandbox Code Playgroud)