Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用JavaScript开始承诺?_Javascript_Promise - Fatal编程技术网

如何用JavaScript开始承诺?

如何用JavaScript开始承诺?,javascript,promise,Javascript,Promise,这似乎是一个奇怪的问题,但请允许我解释一下: 我有这个功能,我想把它变成一个承诺,因为我相信一些事件没有完全启动,而其他事件在启动之前(例如,PlayerOverallTotal的状态是错误的,因为我认为它没有考虑到上面的代码,所以我需要等待它完成,然后再设置状态 handleClickTwist() { this.dealToPlayer(); this.forceUpdate(); let playersDeck = this.state.playersDeck;

这似乎是一个奇怪的问题,但请允许我解释一下: 我有这个功能,我想把它变成一个承诺,因为我相信一些事件没有完全启动,而其他事件在启动之前(例如,PlayerOverallTotal的状态是错误的,因为我认为它没有考虑到上面的代码,所以我需要等待它完成,然后再设置状态

  handleClickTwist() {
    this.dealToPlayer();
    this.forceUpdate();
    let playersDeck = this.state.playersDeck;
    let playersDeckTotal = [];
    for (var i=0; i < playersDeck.length; i++){
      playersDeckTotal.push(playersDeck[i].rankValue)
    }

    let total = playersDeckTotal.reduce(function(a, b) {
        return a + b;
      },
    0);

    this.setState({playersOverallTotal: total});
    this.total();
  };
然后我可以这样称呼:

this.func().then(() => {
      return this.anotherFunc();
    }).then(() => {
      return Promise.resolve(this.setState({playersOverallTotal: total}))
    }).then(() => {
      return this.anotherFun();

但到目前为止,我无法思考如何处理这段代码。或者更确切地说,我可以在
anotherFunc()
中调用什么初始函数来启动该函数?

也许您缺少一些共同的理解:

首先,我看不出您的代码有任何可能的问题,这些问题可以通过承诺解决,但可以通过任何方式解决,如您的示例所示:

anotherFunc(){
    return new Promise((resolve, reject) => {

      // do some crazy stuff here
      // if you do an ajax call put "resolve" 
      // into success function after ajax is finished

      if(allIsFine) {
        resolve(passAnyData);
      } else { reject() };
    }
  }
然后一个电话

anotherFunc().then(function(passAnyData) {
// resolve called with passAnyData


}).catch(function() {
// some error
});

“我可以在anotherFunc()中调用什么样的初始函数来启动该函数?”-那将是
Promise
,您已经在那里调用了它。我在您的代码中没有看到任何异步函数。因此您不应该需要Promise。如果
dealToPlayer()
forceUpdate()
是异步的,则它们应该接受回调或返回承诺。您的问题不在于
handleClickTwist()
function默认情况下,javascript代码会等待上一个代码完成后再继续。承诺和回调允许您在某些外部进程运行时执行某些操作,例如:加载图像或json文件。在您的代码中,我看不到任何外部进程,因此您的错误很可能只是编程错误。这取决于nds关于其他函数(dealToPlayer()、forceUpdate()等)的作用,好的,让我这样说:
let total=playerDeckTotal.reduce(函数(a,b){return a+b;},0);console.log(playerDeckTotal,'deck');console.log(total,'t0t1');//logs 19如预期的那样。setState({playerOverallTotal:total});console.log(this.state.playersOverallTotal,'tot');
//日志14,因为它打折了最后的数字。为什么要这样做?好的,我需要一个超时。但会将您的标记为正确
anotherFunc().then(function(passAnyData) {
// resolve called with passAnyData


}).catch(function() {
// some error
});