Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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_Function_Asynchronous_Promise - Fatal编程技术网

如何使Javascript函数在另一个函数完成后启动?

如何使Javascript函数在另一个函数完成后启动?,javascript,function,asynchronous,promise,Javascript,Function,Asynchronous,Promise,我希望在其他一些功能运行并将内容加载到我的网页后启动一系列功能。我曾使用过设置超时,但我知道这是一种不好的做法,因为连接可能会出现延迟,在这种情况下,它们会错误运行。如何在不使用设置超时的情况下按顺序执行函数 一旦通过newsApiLeft()和newsApiRight()函数在网页上创建了一系列列表,则应运行avgEmotion和avgEntity函数 非常感谢 button.addEventListener("click", function () { var filter = docu

我希望在其他一些功能运行并将内容加载到我的网页后启动一系列功能。我曾使用过
设置超时
,但我知道这是一种不好的做法,因为连接可能会出现延迟,在这种情况下,它们会错误运行。如何在不使用
设置超时的情况下按顺序执行函数

一旦通过
newsApiLeft()
newsApiRight()
函数在网页上创建了一系列列表,则应运行
avgEmotion
avgEntity
函数

非常感谢

button.addEventListener("click", function () {
  var filter = document.getElementById("news_cat");
  var filterSource = document.getElementById("news_source");
  var category = filter.value;
  var source = filterSource.value;
  params.sources = source;
  params.q = category;
  parameters.q = category;

  var filterL = document.getElementById("news_sourceL");
  var sourceL = filterL.value;
  parameters.sources = sourceL;

  showContent();
  clearTextRight();
  clearTextLeft();

  newsApiLeft();
  newsApiRight();

  setTimeout(avgEmotionR, 2000);
  setTimeout(avgEmotionL, 2000);
  setTimeout(avgSentiment, 2000);
})

您可以使用回调来实现这一点:

function newsApiLeft(callback) {
    // Load stuff

    // Then call the callback; the code you want
    //  to run after the loading is complete
    callback();
}

newsApiLeft(function() {
    avgEmotion();
    avgSentiment();
});
如果您对
使用相同的回调,则可以保存回调并将其用于以下两种情况:

var callback = function() {
    avgEmotion();
    avgSentiment();
}

newsApiLeft(callback);
newsApiRight(callback);

您可以使用回调来实现这一点:

function newsApiLeft(callback) {
    // Load stuff

    // Then call the callback; the code you want
    //  to run after the loading is complete
    callback();
}

newsApiLeft(function() {
    avgEmotion();
    avgSentiment();
});
如果您对
使用相同的回调,则可以保存回调并将其用于以下两种情况:

var callback = function() {
    avgEmotion();
    avgSentiment();
}

newsApiLeft(callback);
newsApiRight(callback);

在另一个函数返回(异步调用)后执行函数的正确方法是使用。使您的
newsApiLeft()
newsApiRight
函数返回承诺,然后按如下方式调用它们:

var newsApiLeft=新承诺(函数(解析、拒绝){
//做一些长期的事情
让一切正常=真实;
如果(一切正常){
解析(“我可以返回一个值”);
//或者干脆下决心();
}否则{
拒绝(错误(“或错误”);
}
});
newsApiLeft.then((returnedData)=>{
avgEmotionL();
//在这里运行另一个函数;
//您可以使用返回的数据
},(错误)=>{
//可选地处理错误
})

在另一个函数返回(异步调用)后执行函数的正确方法是使用。使您的
newsApiLeft()
newsApiRight
函数返回承诺,然后按如下方式调用它们:

var newsApiLeft=新承诺(函数(解析、拒绝){
//做一些长期的事情
让一切正常=真实;
如果(一切正常){
解析(“我可以返回一个值”);
//或者干脆下决心();
}否则{
拒绝(错误(“或错误”);
}
});
newsApiLeft.then((returnedData)=>{
avgEmotionL();
//在这里运行另一个函数;
//您可以使用返回的数据
},(错误)=>{
//可选地处理错误
})

您可以使用JavaScript实现这一点

在这里,我创建了一个Promise a,在这里我对下面提到的注释进行逻辑处理。然后,您需要根据您的逻辑来解决或拒绝它。如果解析,则将调用()函数

在第一个then()函数中,可以嵌套新的承诺。像智者一样,你可以想窝多少就窝多少。这样,您可以确保承诺B仅在承诺A结束后执行

var A = new Promise(function(resolve, reject) {

    // Do an async task here and then...

    if(/* good condition */) {
        resolve('Success!');
    }
    else {
        reject('Failure!');
    }
});

A.then(function() { 
    /* do something with the result */
}).catch(function() {
    /* error :( */
})

用于执行承诺A just do
A()

您可以使用JavaScript实现这一点

在这里,我创建了一个Promise a,在这里我对下面提到的注释进行逻辑处理。然后,您需要根据您的逻辑来解决或拒绝它。如果解析,则将调用()函数

在第一个then()函数中,可以嵌套新的承诺。像智者一样,你可以想窝多少就窝多少。这样,您可以确保承诺B仅在承诺A结束后执行

var A = new Promise(function(resolve, reject) {

    // Do an async task here and then...

    if(/* good condition */) {
        resolve('Success!');
    }
    else {
        reject('Failure!');
    }
});

A.then(function() { 
    /* do something with the result */
}).catch(function() {
    /* error :( */
})

用于执行承诺A just do
A()

您可以使用回调,但如果您对回调不满意,可以看看Douglas Crockford的RQ,newsApiLeft
和newsApiRight
返回什么?我猜它们是异步函数。函数不返回任何内容也不接收任何参数显然是错误代码的标志。您可以使用回调,但如果您对回调不满意,可以看看Douglas Crockford的RQ what do
newsApiLeft
newsApiRight
return?我猜它们是异步函数。函数不返回任何内容,也不接收任何参数,这显然是错误代码的标志。