Javascript 在日志记录时避免承诺构造函数反模式

Javascript 在日志记录时避免承诺构造函数反模式,javascript,promise,bluebird,Javascript,Promise,Bluebird,我在看这个问题,答案是有道理的 但是,如果您只想简单地在函数中添加一条日志消息或一些简单的东西,有没有办法避免创建这样的新承诺 function getStuffDone(param) { return new Promise(function(resolve, reject) { // using a promise constructor myPromiseFn(param+1) .then(function(val) {

我在看这个问题,答案是有道理的

但是,如果您只想简单地在函数中添加一条日志消息或一些简单的东西,有没有办法避免创建这样的新承诺

function getStuffDone(param) {
    return new Promise(function(resolve, reject) {
        // using a promise constructor
        myPromiseFn(param+1)
        .then(function(val) {
            console.log("getStuffDone executing");
            resolve(val);
        }).catch(function(err) {
            console.log("getStuffDone error");
            reject(err);
        });
    });
}
如果在这个位置运行promise之前您还需要一条日志消息呢?这会让事情变得更困难吗

function getStuffDone(param) {
    return new Promise(function(resolve, reject) {
        // using a promise constructor
        console.log("getStuffDone starting");
        myPromiseFn(param+1)
        .then(function(val) {
            console.log("getStuffDone executing");
            resolve(val);
        }).catch(function(err) {
            console.log("getStuffDone error");
            reject(err);
       });
   });
}

只需在日志回调中返回或重新调用原始值,
then()
将为您提供相同的承诺

承诺的全部意义在于,它们很容易像那样连锁

return myPromiseFn(param+1)
     .then(function(val) {
         console.log("getStuffDone executing");
         return val;
     }).catch(function(err) {
         console.log("getStuffDone error");
         throw err;
     });

只需在日志回调中返回或重新调用原始值,
then()
将为您提供相同的承诺

承诺的全部意义在于,它们很容易像那样连锁

return myPromiseFn(param+1)
     .then(function(val) {
         console.log("getStuffDone executing");
         return val;
     }).catch(function(err) {
         console.log("getStuffDone error");
         throw err;
     });

斯莱克斯说的。作为退货/退货的替代方案,它还可以分支您的连锁店:

var p = myPromiseFn(param+1);
p.then(val => console.log("getStuffDone executing"),
       err => console.log("getStuffDone error"));
return p;

每个分支都是一个独立的链,因此日志记录不会以任何方式影响返回的
p

SLaks所说的。作为退货/退货的替代方案,它还可以分支您的连锁店:

var p = myPromiseFn(param+1);
p.then(val => console.log("getStuffDone executing"),
       err => console.log("getStuffDone error"));
return p;

每个分支都是一个独立的链,因此日志记录不会以任何方式影响返回的
p

日志记录不是特例。“明确承诺-构造-反模式”可以而且应该避免。日志记录不是特例。“明确承诺构建反模式”可以也应该避免。我仍然在想我在问题中添加的编辑。在scond的情况下,为了容纳“getStuffDone开始”日志,我需要将其包装在一个新的注释中?虽然我想更好的解决方案是在这种情况下不使用日志。@user2802557:您可以在调用其他函数之前同步调用它。我仍然想知道我添加到问题中的编辑。在scond的情况下,为了容纳“getStuffDone开始”日志,我需要将其包装在一个新的注释中?虽然我想更好的解决方案是在这种情况下不使用日志。@user2802557:您可以在调用其他函数之前同步调用它。