2016-11-04 18 views
2

I実際のエラーオブジェクトを返しますPromise.reject確実に次のコードを持っている:使用Object.createの代わりsetPrototypeof

export const rejectWithAnError = function(error) { 
    if(error.constructor === Error) { 
    return Promise.reject(error); 
    } 

    const err = { error: true, message: error }; 
    Object.setPrototypeOf(err, new Error()); 
    return Promise.reject(err); 
}; 

が、私はその後、良いでしょうObject.createを使用して言うこのlinkに出くわしたが。

この場合、Object.createはどのように使用しますか?

+1

[エラー](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)を使用しないでください。 – ltamajs

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error –

+0

新しいエラーを使用することもできますが、これは学習の練習です – dagda1

答えて

1

MDNリンクは特に言うこと:

あなたはパフォーマンスを気にした場合は、オブジェクトの[[Prototype]]を設定することは避けてください。代わりに、Object.create()を使用して、希望する[[Prototype]]の新しいオブジェクトを作成します。 MDN's Object.create page

const err = Object.create(Error.prototype); 
err.error = true; 
err.message = error; 

ので、代わりにリテラル式{ error: true, message: error }でオブジェクトを作成し、後でそのプロトタイプを変更するので、あなたは、そのプロトタイプError.prototype、その後はそれにプロパティを設定されている新しいオブジェクトを作る必要があります使用中のObject.create(Foo.prototype)パターンの数多くの例を見ることができます。

1

セットprototypeError.prototypeに、オブジェクトとしてmessage設定err.constructorをパラメータとしてerr.messageで呼び出されたときに表示されるべきメッセージにオブジェクトのvalueを設定します。

var err = Object.create(Error.prototype, { 
 
    message: { 
 
    value: "error" 
 
    }, 
 
    error: { 
 
    value: true 
 
    } 
 
}) 
 

 
Promise.reject(err.constructor([err.message, err.error])) 
 
    .then(data => console.log(data)) 
 
    .catch(e => console.log(e, e.message));

関連する問題