JavaScript承诺、解决、拒绝
所以我想知道承诺的回应和拒绝对象是怎么回事。 我在读这个 有些事情我还不清楚 例如,JavaScript承诺、解决、拒绝,javascript,promise,Javascript,Promise,所以我想知道承诺的回应和拒绝对象是怎么回事。 我在读这个 有些事情我还不清楚 例如,resolve()对象是关于什么的 我已经看到这个东西可以包含在一个字符串中,然后启动resolve()? 发生了什么事?这有什么意义 var promise1 = new Promise(function(resolve, reject) { setTimeout(function() { resolve('foo'); }, 300); }); 我最初认为只要回调函数返回一个值,就会启动re
resolve()
对象是关于什么的
我已经看到这个东西可以包含在一个字符串中,然后启动resolve()
?
发生了什么事?这有什么意义
var promise1 = new Promise(function(resolve, reject) {
setTimeout(function() {
resolve('foo');
}, 300);
});
我最初认为只要回调函数返回一个值,就会启动resolve函数/对象
然后它可以转到。然后()
所以我在这件事上玩了一段时间,结果证明,我的理论中有50%的时间是有效的,另外50%的时间让我崩溃
还有拒绝对象/函数,如果一个函数的结果是0,但它必须是1,那么我如何启动它才能继续
var promise1 = new Promise(function(resolve, reject) {
if(someFunction() === 0)
{
reject();
} else {
resolve()
}
});
这段代码只有在我的someFunction()
中没有任何异步函数时才起作用,而且当我有异步函数时,它总是返回未定义的
因此,到目前为止,promise的概念及其用法对我来说还不清楚。你说得对,只要回调函数返回一个值,解析函数(哦,它们是函数)就会启动 在您出现的情况下,该值返回其“foo” 即使它不是一个函数,而是一个函数返回了一些东西。 所以在这一点上,一切都是好的 当回调函数包含任何异步代码时,它都不起作用,这是因为正如您所说的,它返回未定义的代码。 函数尚未完成运行,因此返回该值。 它不等待它。 我能想到的解决这两个问题的最简单的解决方案是将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);
}
如果在
newpromise((resolve,reject)=>…)
中调用resolve('some value')
,它会将'some value'
传递到回调函数中。然后()。如果您调用reject('some error')
它也会这样做,但是对于.catch()
回调,它不会调用。然后()
只要someFunction()
是异步的,您就需要使用If(wait someFunction())
和promise param函数也应该是异步的。resolve
和reject
都是函数,而不仅仅是对象。“我最初认为只要回调函数返回值,resolve
函数[…]就会启动,然后它就可以转到。然后()
” — “回调函数”是指新承诺(
..)
中的函数吗?返回是前进到的一种方法。然后是,但有时是不可能返回的(例如,嵌套的基于事件的函数);这时使用了解析。@George”,并且不会调用。then()
“ — 然后
接受两个参数。如果出现错误,将调用第二个参数。我发现这个博客很有用