JavaScript Promises的新手,并且很难掌握这个概念。我似乎终于明白了,但似乎无法让它发挥作用。
这是一个简单的尝试:
first = function(){
var deferred = new $.Deferred();
console.log("first running")
return deferred.promise();
}
second = function(){
console.log("second running..sigh..");
}
$(document).ready(function() {
first().then(second);
});
第二个没有被召唤。
答案 0 :(得分:5)
为了调用第二个函数,您需要解决从第一个函数返回的延迟函数:
first = function(){
var deferred = new $.Deferred();
console.log("first running");
deferred.resolve(); // <----------resolve the deferred
return deferred.promise();
}
你也可以用参数解决它,这样无论它解决了什么,都会作为参数传递给你的第二个函数。这是一个小提示,为解决方案添加了一点延迟,因此它模仿异步行为并解析实际数据:
答案 1 :(得分:1)
您可以将 Promise 视为将来处理的任务,并将结果返回到延迟对象后面的所有函数。
Promise可以有3 + 1个状态:
var doSomethingAsync = new Promise(function(resolve, reject) {
window.setTimeout(function() {
resolve('Hello World');
// OR
// reject('You Are Not Welcome')
}, 5000);
});
doSomethingAsync.then(
function(message) {
console.log('After few seconds we can finally tell you:', message)
},
function(error) {
console.log('After few seconds we can finally tell you that: ', error);
}
);
正如您在上面的代码段中所看到的,承诺对象的然后方法接受 TWO 参数(注意,如果可用,则有第三个参数称为通知或进度),第一个参数是在fullfilment的情况下调用,第二个是在拒绝的情况下调用。
承诺在待定时,不会调用任何回调!