Rumah > Soal Jawab > teks badan
nodejs中关于ES6的promise嵌套写法
我打算实现如下功能:插入主记录,返回insertId,然后插入明细记录
testObject.insertMain(code,name)
.then((result)=>{
var insertId = result.insertId;
testObject.insertDetail(insertId,........)
.then((result1)=>{
testObject.func3(......)
.then(..)
.catch(..)
})
.catch(..)
.catch(..)
这种逻辑似乎又进入了无限嵌套逻辑。求教如何写正确!
ringa_lee2017-04-17 14:42:26
testObject.insertMain(code,name)
.then((result)=>{
var insertId = result.insertId;
return insertId;
})
.then(function(insertId){
return testObject.insertDetail(insertId);
})
.then(function(detail){
console.log(detail);
})
.catch(..)
PHP中文网2017-04-17 14:42:26
testObject.insertMain(code,name)
.then((result1)=>{
return testObject.insertDetailf(result1.id,......)
}).then(function(result){
console.log('finish');
}).catch(function(err){
console.log(err.stack);
})
伊谢尔伦2017-04-17 14:42:26
把非 Promise 实现改造成 Promise 实现是个巨大的工程。如果都是 Promise 实现就好办了,第一个 Promise 的 then
返回就是第2个 Promise 或者第二个 then
的值,就可以一直 then
下去了,最后来 catch 就行。
xxx.then().then().then().then().catch()
function insertMain() {
return Promise.resolve("main result");
}
function insertDetail(result) {
return Promise.resolve({
main: result,
detail: "detail result"
});
}
insertMain().then(result => {
return insertDetail(result);
}).then(r => {
console.log(r);
// { main: 'main result', detail: 'detail result' }
r.more = "more result";
return Promise.resolve(r);
}).then(r => {
console.log(r);
// { main: 'main result',
// detail: 'detail result',
// more: 'more result' }
});