如何使用promise做串口任务?
How to use promise to do serial tasks?
所以我有4个任务:getStatus()
、updateStatus(A)
、getTask()
、updateTask()
,应该这样执行:
getStatus(function(status) {
// A
updateStatus(status, function(status) {
// B
getTask(function(task) {
// C
updateTask(task, function(task) {
// D
})
})
})
})
所以为了避免回调地狱,我用了promise,现在这四个任务都return一个Promise,然后我改成了这样
getStatus().then(function(status) {
// A
updateStatus(status).then(function(status) {
// B
getTask().then(function(task) {
// C
updateTask(task).then(function(task) {
//D
})
})
})
})
如您所见,它还有 then hell
、
我是不是对 Promise 做错了什么?
应该是这样的:
getStatus().then(function(status) {
// A
return updateStatus(status)
}).then(function(status){
return updateStatus(status)
}).then(function(status) {
return getTask()
}).then(function(task) {
// C
return updateTask(task)
}).then(function(task) {
//D
return getStatus();
}).then(function(newStatus){
// here you have newStatus returned by getStatus() in D
})
而且再也没有回调地狱 ;)
如果您不需要在 C 和 D 中使用 status
,那么使用 .then
将导致解析为 task
:
的承诺
getStatus()
.then(updateStatus)
.then(() => getTask())
.then(updateTask)
还有async/await:
const status = await getStatus();
await updateStatus(status);
const task = await getTask();
await updateTask(task);
如果你想获取 D 中 getStatus 返回的状态。你可以这样做
function getStatus ( //here return promise)
function updateStatus( //here return promise)
function updateTask( //here return promise)
之后
Promise.all([
getStatus(),updateStatus(),updateTask()
]).spread(function(a, b,c) {
//here a = result of getStatus
//here b = result of updateStatus
//here c = result of updateTask
});
所以我有4个任务:getStatus()
、updateStatus(A)
、getTask()
、updateTask()
,应该这样执行:
getStatus(function(status) {
// A
updateStatus(status, function(status) {
// B
getTask(function(task) {
// C
updateTask(task, function(task) {
// D
})
})
})
})
所以为了避免回调地狱,我用了promise,现在这四个任务都return一个Promise,然后我改成了这样
getStatus().then(function(status) {
// A
updateStatus(status).then(function(status) {
// B
getTask().then(function(task) {
// C
updateTask(task).then(function(task) {
//D
})
})
})
})
如您所见,它还有 then hell
、
我是不是对 Promise 做错了什么?
应该是这样的:
getStatus().then(function(status) {
// A
return updateStatus(status)
}).then(function(status){
return updateStatus(status)
}).then(function(status) {
return getTask()
}).then(function(task) {
// C
return updateTask(task)
}).then(function(task) {
//D
return getStatus();
}).then(function(newStatus){
// here you have newStatus returned by getStatus() in D
})
而且再也没有回调地狱 ;)
如果您不需要在 C 和 D 中使用 status
,那么使用 .then
将导致解析为 task
:
getStatus()
.then(updateStatus)
.then(() => getTask())
.then(updateTask)
还有async/await:
const status = await getStatus();
await updateStatus(status);
const task = await getTask();
await updateTask(task);
如果你想获取 D 中 getStatus 返回的状态。你可以这样做
function getStatus ( //here return promise)
function updateStatus( //here return promise)
function updateTask( //here return promise)
之后
Promise.all([
getStatus(),updateStatus(),updateTask()
]).spread(function(a, b,c) {
//here a = result of getStatus
//here b = result of updateStatus
//here c = result of updateTask
});