请教正确的promise用法!!!
下面是错误的写法 最后没有return的结果就是 调用这个API函数拿不到promise
const apiFunction = () => {
return Promise.resolve()
.then(() => (demoResolve()))
.then(() => (demoReject()))
.then((data) => {
// bug
Promise.resolve(data);
})
.catch((err) => {
// bug
Promise.reject(err);
});
};
改进后下面这个promise方法能够如预期的拿到promise的值
const apiFunction = () => {
return Promise.resolve()
.then(() => (doResolve()))
.then(() => (doReject()))
// okay √
.then((data) => Promise.resolve(data))
// okay √
.catch((err) => Promise.reject(err));
};
之后又尝试了一种写法,感觉这种写法和第一种写法没有什么区别,但是这样也写也是可以得到正确结果的。
请问这是什么情况呢?
这样写有错误吗?
const apiFunction = () => {
return Promise.resolve()
.then(() => (doResolve()))
.then(() => (doReject()))
.then(Promise.resolve)
.catch(Promise.reject);
};
是不是等价于这种写法
const apiFunction = () => {
return Promise.resolve()
.then(() => (doResolve()))
.then(() => (doReject()))
.then(result)
.catch(err);
};
迷茫2017-04-17 15:27:08
1. ES6 を比較 => ES5 以降、最初の書き方と 2 番目の書き方の違いは主に Promise が返されるかどうかです
リーリー3 番目のタイプと最初のタイプの違いは、返すかどうかです
天蓬老师2017-04-17 15:27:08
AL.
はどこから来たのですか更新。
しまった、この質問を見て、確かに質問者さんの書き方が間違っていたので質問させていただきました。後でもう一度来たら、他の回答者がすべて正しい答えを言っていたので、気にしませんでしたが、今日は踏まれました。本当に悔しい思いをしています。
それでは、もう一度答えを教えましょう。
Promise の then を返す必要があります。これは、後で使用するための新しい Promise を生成するために使用されます。
匿名アロー関数が式を返す場合、デフォルトでそれを返します。
直接記述すると.then(Promise.resolve)
、このメソッドはコールバックとして使用されますが、これはもちろん正しいです。 Promise.resolve
この書き方では、結果がどうなるか分かりません、質問に記載されていません。 .then(result)