Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/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_Node.js_Asynchronous - Fatal编程技术网

Javascript 强制函数等待另一个函数的最佳方法

Javascript 强制函数等待另一个函数的最佳方法,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,在我的代码中,我在另一个函数中使用一个函数,其中内部函数返回一个值。就像这样: function first(){ /*do stuff*/ return stuff; } function second(){ var result = first; } 但我的问题是,第二个函数并不等待第一个函数,因此,我得到一个未定义的返回 如何强制一个函数等待另一个函数来获得同步函数?我会使用一个承诺,从第一个函数返回一个承诺 例如: function first(){ /*d

在我的代码中,我在另一个函数中使用一个函数,其中内部函数返回一个值。就像这样:

function first(){
    /*do stuff*/
    return stuff;
}
function second(){
    var result = first;
}
但我的问题是,第二个函数并不等待第一个函数,因此,我得到一个未定义的返回


如何强制一个函数等待另一个函数来获得同步函数?

我会使用一个承诺,从第一个函数返回一个承诺

例如:

function first(){
  /*do stuff*/
  return Promise.resolve(stuff);
}

first().then((stuff) => {
    second(stuff);
});
一个更具体的例子,让我们做一些异步。材料:

function first(){
    return new Promise((resolve) => {
        setTimeout(resolve, 100, 'stuff');
    });
}

function second(stuff){
    console.log('second: ', stuff);
}

first().then((stuff) => {
    second(stuff);
});
在更新版本的Node.js中,您还可以执行以下操作:

var testIt = async function()
{
    var result = await first();
    second(result);
}

testIt();

这是一点语法上的甜点,使代码更容易理解。

我会使用承诺来实现这一点,返回第一个承诺

例如:

function first(){
  /*do stuff*/
  return Promise.resolve(stuff);
}

first().then((stuff) => {
    second(stuff);
});
一个更具体的例子,让我们做一些异步。材料:

function first(){
    return new Promise((resolve) => {
        setTimeout(resolve, 100, 'stuff');
    });
}

function second(stuff){
    console.log('second: ', stuff);
}

first().then((stuff) => {
    second(stuff);
});
在更新版本的Node.js中,您还可以执行以下操作:

var testIt = async function()
{
    var result = await first();
    second(result);
}

testIt();

这是一点语法上的甜点,使代码更容易理解。

它是如何工作的?因此,承诺允许您延迟函数的结果,这实际上是另一种处理异步代码的方式,更具可读性。@Terrylenox我知道这不是寻求帮助的方式,但我非常需要它。,,你能看一下这个吗……,我几乎解决了,我会的,尽管我也很困惑!它是如何工作的?所以承诺可以让你延迟函数的结果,这实际上是另一种处理异步代码的方式,更具可读性。@Terrylenox我知道这不是寻求帮助的方式,但我非常需要它。,,你能看一下吗…,我几乎解决了它,我会的,尽管我也很困惑!如果您的/*do stuff*/是异步的(如web调用等),则“return stuff;”不会做你认为它会做的事。它将只返回异步调用之前的'stuff'值。因此,正如特里所说,一个承诺也许是最好的选择。您还可以设置“do stuff”的侦听器,以便在完成时调用。这将产生“do stuff”的结果,您可以对其进行处理。如果您的/*do stuff*/是异步的(如web调用等),则“return stuff;”不会做你认为它会做的事。它将只返回异步调用之前的'stuff'值。因此,正如特里所说,一个承诺也许是最好的选择。您还可以设置“do stuff”的侦听器,以便在完成时调用。这将产生“做事情”的结果,然后您可以对其进行处理。