node.js - promise嵌套的问题,后面一个then用到前面的then的返回值。
阿神
阿神 2017-04-17 14:40:26
[Node.js讨论组]

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

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

阿神
阿神

闭关修行中......

全部回复(3)
ringa_lee
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中文网
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' }
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号