承诺仅适用于异步操作吗?
Are promises only for async operations?
我想知道我是否可以将 promises 与我的倒数计时器一起使用。我的代码看起来像这样:
function countdown(duration, callback) {
...
}
function sayHi() {
console.log('hi');
}
我通过类似
的方式来调用它
countdown(15, sayHi);
有什么办法可以代替吗?
countdown(15).then(sayHi);
Here 是我当前代码的 JSFiddle。
是的,承诺是 "hide" 回调的一种方式。对于您的示例,您可以使用这样的承诺:
function countdown(duration) {
return new Promise(function (resolve, reject) {
// wait for duration and resolve
setTimeout(function () {
resolve();
}, duration);
});
}
function sayHi() {
console.log('hi');
}
countdown(1000).then(sayHi);
是的,您可以 resolve
在您自己的特定时间关闭它们 like.use 以避免同时发生多个调用的不良响应。
function countdown(duration, callback) {
var deferred = Promise.defer();
(function(duration,deferred){setTimeout(function(){
deferred.resolve();
},duration);
})(duration,deferred);
}
上一个已过时检查这个。
function countdown(duration, callback) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, duration);
});
}
function countdown(duration) {
return new Promise(function(resolve, reject) {
var interval = setInterval(function() {
console.log(duration--);
if (!duration) {
clearInterval(interval);
resolve();
}
}, 1000);
});
}
countdown(15).then(function() { console.log("DONE"); });
Promise 适用于任何不一定 运行 立即执行的操作。
Javascript 是单线程的。所以如果你调用一个函数,它必然会立即在同一个线程上 运行 。 promise 是稍后 运行 编码的便捷方式(仍然在同一个线程上,但作为不同事件处理程序的一部分)。
所以在超时的情况下,稍后应该调用回调时,使用 promise 是个好主意。
如果您不确定是使用 promise 还是简单的回调,两者的用途或多或少是相同的,但 promises 通常会使代码更具可读性。
ES7 async-await 更具可读性!
我想知道我是否可以将 promises 与我的倒数计时器一起使用。我的代码看起来像这样:
function countdown(duration, callback) {
...
}
function sayHi() {
console.log('hi');
}
我通过类似
的方式来调用它countdown(15, sayHi);
有什么办法可以代替吗?
countdown(15).then(sayHi);
Here 是我当前代码的 JSFiddle。
是的,承诺是 "hide" 回调的一种方式。对于您的示例,您可以使用这样的承诺:
function countdown(duration) {
return new Promise(function (resolve, reject) {
// wait for duration and resolve
setTimeout(function () {
resolve();
}, duration);
});
}
function sayHi() {
console.log('hi');
}
countdown(1000).then(sayHi);
是的,您可以 resolve
在您自己的特定时间关闭它们 like.use 以避免同时发生多个调用的不良响应。
function countdown(duration, callback) {
var deferred = Promise.defer();
(function(duration,deferred){setTimeout(function(){
deferred.resolve();
},duration);
})(duration,deferred);
}
上一个已过时检查这个。
function countdown(duration, callback) {
return new Promise(function (resolve, reject) {
setTimeout(function () {
resolve();
}, duration);
});
}
function countdown(duration) {
return new Promise(function(resolve, reject) {
var interval = setInterval(function() {
console.log(duration--);
if (!duration) {
clearInterval(interval);
resolve();
}
}, 1000);
});
}
countdown(15).then(function() { console.log("DONE"); });
Promise 适用于任何不一定 运行 立即执行的操作。
Javascript 是单线程的。所以如果你调用一个函数,它必然会立即在同一个线程上 运行 。 promise 是稍后 运行 编码的便捷方式(仍然在同一个线程上,但作为不同事件处理程序的一部分)。
所以在超时的情况下,稍后应该调用回调时,使用 promise 是个好主意。
如果您不确定是使用 promise 还是简单的回调,两者的用途或多或少是相同的,但 promises 通常会使代码更具可读性。
ES7 async-await 更具可读性!