日志记录时避免 Promise 构造函数反模式
Avoid Promise constructor antipattern when logging
我正在看这个问题,答案很有意义
What is the explicit promise construction antipattern and how do I avoid it?
但是,如果您只想在函数中简单地放置一条日志消息或一些简单的东西,有什么方法可以避免必须像这样创建一个新的承诺
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);
});
});
}
只要 return 或在您的日志记录回调中重新抛出原始值,then()
就会给您同样的承诺。
承诺的全部意义在于它们很容易像那样链接。
return myPromiseFn(param+1)
.then(function(val) {
console.log("getStuffDone executing");
return val;
}).catch(function(err) {
console.log("getStuffDone error");
throw err;
});
SLaks 说的。作为 return/rethrow 的替代方案,它也适用于 branch 你的链:
var p = myPromiseFn(param+1);
p.then(val => console.log("getStuffDone executing"),
err => console.log("getStuffDone error"));
return p;
每个分支都是一个独立的链,因此日志记录不会以任何方式影响返回的p
。
我正在看这个问题,答案很有意义
What is the explicit promise construction antipattern and how do I avoid it?
但是,如果您只想在函数中简单地放置一条日志消息或一些简单的东西,有什么方法可以避免必须像这样创建一个新的承诺
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);
});
});
}
只要 return 或在您的日志记录回调中重新抛出原始值,then()
就会给您同样的承诺。
承诺的全部意义在于它们很容易像那样链接。
return myPromiseFn(param+1)
.then(function(val) {
console.log("getStuffDone executing");
return val;
}).catch(function(err) {
console.log("getStuffDone error");
throw err;
});
SLaks 说的。作为 return/rethrow 的替代方案,它也适用于 branch 你的链:
var p = myPromiseFn(param+1);
p.then(val => console.log("getStuffDone executing"),
err => console.log("getStuffDone error"));
return p;
每个分支都是一个独立的链,因此日志记录不会以任何方式影响返回的p
。