相关疑难解决方法(0)

什么是明确的承诺构建反模式,我该如何避免它?

我编写的代码看起来像:

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构造函数反模式 ",这个代码有什么不好,为什么这被称为 …

javascript promise q bluebird es6-promise

479
推荐指数
3
解决办法
7万
查看次数

抛出错误('msg')vs抛出新错误('msg')

var err1 = Error('message');
var err2 = new Error('message');
Run Code Online (Sandbox Code Playgroud)

有什么不同?在Chrome控制台中查看它们,它们看起来完全相同.对象和同一__proto__链上的相同属性.几乎看起来像Error一个工厂.

哪一个是正确的,为什么?

javascript exception

150
推荐指数
2
解决办法
2万
查看次数

我可以在异步函数中抛出错误吗?

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函数,所以没有resrej方法在那里.那么,问题是:我可以throwasync函数中出错吗?或者它被认为是好/坏的做法?

我想做的一个例子:

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)

但第一个看起来更清楚,我不确定应该使用哪一个.

javascript promise async-await es6-promise

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

javascript ×3

es6-promise ×2

promise ×2

async-await ×1

bluebird ×1

exception ×1

q ×1