我已经使用promises在javascript中实现了一些功能,但我对一件事感到困惑,差异b / w这两个
Promise.resolve()
.then(doSomething())
和
.then(() => doSomething())
答案 0 :(得分:2)
then
需要一个功能。在第一种情况下,您将调用then
的结果传递给doSomething()
,而在第二种情况下,您实际上正在传递调用doSomething()
的函数。< / p>
那些是等价的(假设你不需要参数或this
):
Promise.resolve().then(doSomething)
Promise.resolve().then(() => doSomething())
答案 1 :(得分:1)
.then(doSomething())
会在调用doSomething
回调之前立即调用then
。
.then(() => doSomething())
创建一个新函数,该函数将成为then
回调。
答案 2 :(得分:0)
要扩展@Lucas答案,这是正确的,Promise中的document.querySelector('input[type="text"]').id = 'sinput';
document.getElementById("sinput").addEventListener("keypress", function() {
document.getElementById("1").style.display ="none";
});
就是这样制定的(来自MDN):
<div id="1">hey all</div>
<input type="text" name="txt" />
所以你的第一个参数是履行的函数,你的第二个函数是拒绝的参数,两个参数都是函数,根据发生的值传递值。
所以,正如@Lucas所说,
then
实际调用你的函数,只是传入Promise.then(onFulfilled[, onRejected]);
Promise.then(function(value) {
// fulfillment
}, function(reason) {
// rejection
});
调用函数并返回一个值,如果没有返回则返回undefined,除非该函数返回一个函数,否则什么也不做可能是一个不合理的方式来解决这个问题。)