下面一段代码片
CloudCtl.Instructions2.Clean[logic.instructions.Clean.class].Handler.call(self, userID, deviceID, deviceRealm, dResource, jCtl, extra, (err) => {
if (err) {
if(jCtl.type == "move"){
CloudCtl.Instructions2.GetMapState[logic.instructions.GetMapState.class].Handler.call(self, userID, deviceID, deviceRealm, dResource, jCtl, extra, (err, data) => {
//state:地图状态,string;none - 未建图,building - 正在建图,s_build - 建图未完成 ,built - 建图完成,preparing - 工作准备中
jCtl.state = data.state || "none";
if ( err || jCtl.state == "built") {
return cb(null, {ret: "fail", errno: err.errno});
}
jCtl.type = "explore"
CloudCtl.Instructions2.Clean[logic.instructions.Clean.class].Handler.call(self, userID, deviceID, deviceRealm, dResource, jCtl, extra, (err) => {
if (err) {
return cb(null, {ret: "fail", errno: err.errno});
}
return cb(null, {ret: "ok"});
})
})
}
return cb(null, {ret: "fail", errno: err.errno});
}
return cb(null, {ret: "ok"});
上面这段代码错误:
在代码进入
if(jCtl.type == "move")
之后,等待GetMapState异步回调的过程中,就会跳出if。进入
return cb(null, {ret: "fail", errno: err.errno});
这种情况下,等异步回调进来就会二次回调
解决方法一:
将
return cb(null, {ret: "fail", errno: err.errno});
套在else中
解决方法二 :
在if中return:
CloudCtl.Instructions2.Clean[logic.instructions.Clean.class].Handler.call(self, userID, deviceID, deviceRealm, dResource, jCtl, extra, (err) => {
if (err) {
if(jCtl.type == "move"){
CloudCtl.Instructions2.GetMapState[logic.instructions.GetMapState.class].Handler.call(self, userID, deviceID, deviceRealm, dResource, jCtl, extra, (err, data) => {
//state:地图状态,string;none - 未建图,building - 正在建图,s_build - 建图未完成 ,built - 建图完成,preparing - 工作准备中
jCtl.state = data.state || "none";
if ( err || jCtl.state == "built") {
return cb(null, {ret: "fail", errno: err.errno});
}
jCtl.type = "explore"
CloudCtl.Instructions2.Clean[logic.instructions.Clean.class].Handler.call(self, userID, deviceID, deviceRealm, dResource, jCtl, extra, (err) => {
if (err) {
return cb(null, {ret: "fail", errno: err.errno});
}
return cb(null, {ret: "ok"});
})
})
return //此处
}
return cb(null, {ret: "fail", errno: err.errno});
}
return cb(null, {ret: "ok"});
})