Javascript nodejs承诺序列的问题

Javascript nodejs承诺序列的问题,javascript,node.js,Javascript,Node.js,Hi在下面的功能中,当我打印日志文件时,我可以看到以下顺序显示的消息,尽管promise用于同步通信 显示顺序- a) “通话前” b“电话后” c) “内部保存” d) “没有问题” 我在代码中做了哪些更改以获得以下日志顺序- a) “通话前” b) “通话后” c) “无问题” d) “内部保存” 控制器代码- module.exports.updateLocalTransportVendorDtls = function (req, res) { var transportSch

Hi在下面的功能中,当我打印日志文件时,我可以看到以下顺序显示的消息,尽管promise用于同步通信

显示顺序-

a) “通话前” b“电话后” c) “内部保存” d) “没有问题”

我在代码中做了哪些更改以获得以下日志顺序-

a) “通话前” b) “通话后” c) “无问题” d) “内部保存”

控制器代码-

module.exports.updateLocalTransportVendorDtls = function (req, res) {

    var transportSchema = new transportModel();

    new Promise(function (resolve, reject) {

        checkForNewVehicleType(req, function (doc) {
            resolve(doc)
        })
    })
    .then(function (doc) {

        var updateJustServiceDtls = doc.split(/\|/)[2];
        var updateVehicle = doc.split(/\|/)[0];
        var addVehicle = doc.split(/\|/)[1];

        if (updateJustServiceDtls == 'true') { /* To update service details for the same vendor */
            console.log("before call")
            updateJustServiceDetailsOnly(req, res)
            console.log("after call")        
        }

    }).then(function () {
        console.log("inside save")
        transportSchema.save(function (error) {
            if (error) {               
                return res.status(500).json({ "Message": error.message.trim() });
            }
            else {
                return res.json({ "Message": "Data got inserted successfully in local_transport_details collection" });
            }
        })

    }).catch(function (err) {
        return res.json({ "Message": err.message });
    });
}
函数调用-

var updateJustServiceDetailsOnly = function (req, res) {

    var promise = new Promise(function (resolve, reject) {

                //code to update db
                console.log("no issues")
                resolve();
            });
    })
    return promise;
}

调用后的
如何
,如果它只是日志,则可以忽略它,并仅返回
updatejservicedetaily的结果

返回将强制将执行传递到下一个执行,然后当
updatejservicedetailsonly
的承诺得到解决时。但在那一行之后,代码就不起作用了。如果想要获得所需的结果,则需要在返回后移除零件

if (updateJustServiceDtls == 'true') {
    console.log("before call")
    return updateJustServiceDetailsOnly(req, res)
    // console.log("after call")  this will not be called
}
使用此代码,结果将是

a)"before call" b)"no issues" c)"inside save"

调用后的
如何
,如果它只是日志,则可以忽略它,并仅返回
updatejservicedetaily的结果

返回将强制将执行传递到下一个执行,然后当
updatejservicedetailsonly
的承诺得到解决时。但在那一行之后,代码就不起作用了。如果想要获得所需的结果,则需要在返回后移除零件

if (updateJustServiceDtls == 'true') {
    console.log("before call")
    return updateJustServiceDetailsOnly(req, res)
    // console.log("after call")  this will not be called
}
使用此代码,结果将是

a)"before call" b)"no issues" c)"inside save"

只要回报你的承诺

 if (updateJustServiceDtls == 'true') { /* To update service details for the same vendor */
        console.log("before call")
        return updateJustServiceDetailsOnly(req, res)
        console.log("after call")        
 }
在这种情况下,显然不会记录事后通话。但只需在下一个
中移动日志即可。然后

当你处于承诺链中时,如果你还有另一个承诺要做,并且你想等待它,那么就把它退回

例如:

Promise.resolve()
.then(() => {
    // I have an async to do, I return it to wait for it
    return Promise.resolve('after call');
})
.then((result) => {
    // it will be called only when the Promise returned in the previous chain will resolve
    // the result is the data passed in the resolution of your promise
    console.log(result); // after call
}); 

只要回报你的承诺

 if (updateJustServiceDtls == 'true') { /* To update service details for the same vendor */
        console.log("before call")
        return updateJustServiceDetailsOnly(req, res)
        console.log("after call")        
 }
在这种情况下,显然不会记录事后通话。但只需在下一个
中移动日志即可。然后

当你处于承诺链中时,如果你还有另一个承诺要做,并且你想等待它,那么就把它退回

例如:

Promise.resolve()
.then(() => {
    // I have an async to do, I return it to wait for it
    return Promise.resolve('after call');
})
.then((result) => {
    // it will be called only when the Promise returned in the previous chain will resolve
    // the result is the data passed in the resolution of your promise
    console.log(result); // after call
});