我编写的代码看起来像:
function getStuffDone(param) { | function getStuffDone(param) {
var d = Q.defer(); /* or $q.defer */ | return new Promise(function(resolve, reject) {
// or = new $.Deferred() etc. | // using a promise constructor
myPromiseFn(param+1) | myPromiseFn(param+1)
.then(function(val) { /* or .done */ | .then(function(val) {
d.resolve(val); | resolve(val);
}).catch(function(err) { /* .fail */ | }).catch(function(err) {
d.reject(err); | reject(err);
}); | });
return d.promise; /* or promise() */ | });
} | }
Run Code Online (Sandbox Code Playgroud)
有人告诉我这个被称为" 延迟反模式 "或" Promise构造函数反模式 ",这个代码有什么不好,为什么这被称为 …
var err1 = Error('message');
var err2 = new Error('message');
Run Code Online (Sandbox Code Playgroud)
有什么不同?在Chrome控制台中查看它们,它们看起来完全相同.对象和同一__proto__链上的相同属性.几乎看起来像Error一个工厂.
哪一个是正确的,为什么?
我async/await在我的Node.js项目中使用.在某些地方我需要从async函数返回错误.如果我使用Promises,我可以这样做:
function promiseFunc() {
return new Promise((res, rej) => {
return rej(new Error('some error'))
})
}
Run Code Online (Sandbox Code Playgroud)
但我正在使用async函数,所以没有res和rej方法在那里.那么,问题是:我可以throw在async函数中出错吗?或者它被认为是好/坏的做法?
我想做的一个例子:
async function asyncFunc() {
throw new Error('some another error')
}
Run Code Online (Sandbox Code Playgroud)
我也可以这样重写它:
async function anotherAsyncFunc() {
return Promise.reject(new Error('we need more errors!'))
}
Run Code Online (Sandbox Code Playgroud)
但第一个看起来更清楚,我不确定应该使用哪一个.