Prom b / w .then(doSomething())和.then(()=> doSomething())在promises中

时间:2017-02-20 00:26:02

标签: javascript node.js promise es6-promise

我已经使用promises在javascript中实现了一些功能,但我对一件事感到困惑,差异b / w这两个

Promise.resolve()

.then(doSomething()) 

.then(() => doSomething())

3 个答案:

答案 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,除非该函数返回一个函数,否则什么也不做可能是一个不合理的方式来解决这个问题。)