所以我想知道响应和拒绝Promise对象是怎么回事。 我正在读这个documentation 有些事情对我来说还不清楚。
例如resolve()
对象的全部含义。
我已经看到这东西可以放在字符串中,然后启动resolve()
吗?
发生了什么,目的是什么
var promise1 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 300);
});
我最初以为只要回调函数返回一个值,就启动resolve函数/对象
然后可以继续到.then()
所以我一直在玩这个东西有一段时间了,事实证明,我对回报有决心的理论在50%的时间里有效,而另外50%的时间让我崩溃了。
也是拒绝对象/函数,当我们说一个函数的结果为0但必须为1以便继续时,如何启动它?
var promise1 = new Promise(function(resolve, reject) {
if(someFunction() === 0)
{
reject();
} else {
resolve()
}
});
仅当我的someFunction()
内部没有任何异步函数时,此代码才有效,而且当我具有任何异步函数时,它总是返回undefined。
到目前为止,对诺言的概念及其用法的了解对我来说还很不清楚。
答案 0 :(得分:1)
您正确的事实是,只要回调函数返回一个值,就会启动resolve函数(哦,它们是functions)。
在您出现的情况下,该值返回了其“ foo”
即使它不是一个函数,就像有一个函数返回某些内容一样。 所以到目前为止,一切都很好。
当回调函数具有任何异步代码时,它不起作用的事实,只是因为正如您所说,它返回的是undefined。 该函数尚未完成运行,因此将其返回。 它不等待它。 我能想到的最简单的解决方案将解决您的两个问题,就是将resolve和reject对象传递给回调函数并从内部启动它们
例如
var promise1 = new Promise(function(resolve, reject) {
someFunction(resolve,reject);
});
function someFunction(resolve,reject){
var i = 0;
setTimeout(function() {
if(i===0){
reject(/**You can even pass it some variables here if u wanted*/);
} else {
resolve(/**Same here*/); // this should work just fine and it will sucesfully launch .then with whatever u need returned
}
}, 300);
}