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:您可以在调用其他函数之前同步调用它。