首页 > promise嵌套的问题,后面一个then用到前面的then的返回值。

promise嵌套的问题,后面一个then用到前面的then的返回值。

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(..)

这种逻辑似乎又进入了无限嵌套逻辑。求教如何写正确!


testObject.insertMain(code,name)
.then((result1)=>{
    return testObject.insertDetailf(result1.id,......)
}).then(function(result){
    console.log('finish');
}).catch(function(err){
    console.log(err.stack);
})

把非 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' }
});

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(..)
【热门文章】
【热门文章】