为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript 承诺、解决、拒绝

JavaScript 承诺、解决、拒绝

呼如林 2021-06-22 17:01:46
所以我想知道响应和拒绝承诺对象是怎么回事。我正在阅读此文档 并且有些事情对我来说很不清楚。例如,resolve()对象是什么。我已经看到这个东西可以包含在一个字符串中,然后resolve()启动?这是怎么回事,这有什么意义var promise1 = new Promise(function(resolve, reject) {  setTimeout(function() {    resolve('foo');  }, 300);});我最初认为只要回调函数返回一个值,解析函数/对象就会启动,然后它可以继续 .then()所以我一直在玩这个东西一段时间,结果证明我的回归决心理论有 50% 的时间有效,另外 50% 的时间让我心烦意乱。还有拒绝对象/函数,当我们说函数的结果是 0 但它必须是 1 以便我可以继续时,你如何启动它?var promise1 = new Promise(function(resolve, reject) {   if(someFunction() === 0)   {     reject();   } else {     resolve()   }});这段代码仅在我内部someFunction()没有任何异步函数时才有效,而且当我有任何异步函数时,它总是返回 undefined。所以到目前为止,promise 的概念及其使用对我来说还不清楚。
查看完整描述

1 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您是正确的,只要回调函数返回一个值,就会启动解析函数(哦,它们是函数)。


在你出现的情况下,该值返回了它的 'foo'


即使它不是一个拥有它的函数,它也相当于让一个函数返回一些东西。所以到那时一切都很好。


事实上,当回调函数有任何异步代码时它不起作用,这只是因为正如你所说,它返回未定义。该函数还没有完成运行,所以它返回。它不等它。我能想到的最简单的解决方案是将解决和拒绝对象传递给回调函数并从内部启动它们


例如


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);

}


查看完整回答
反对 回复 2021-06-24
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信