Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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_Asynchronous_Promise - Fatal编程技术网

Javascript 如果不是承诺,如何等待值返回

Javascript 如果不是承诺,如何等待值返回,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,例如,有一个我自己没有开发的异步函数,但我知道在随机时间(几秒钟内)该函数将返回一个值。 如果它不返回承诺,那么这是等待返回的方式吗?不是这样 您可以编写一个包装器函数,它返回一个承诺,并进行轮询,直到得到结果 然后,promise将调用您没有重复编写的函数(例如,使用setInterval),直到它返回一个值,然后将其传递给resolve function wrap_function () { return new Promise(function (resolve, reject)

例如,有一个我自己没有开发的异步函数,但我知道在随机时间(几秒钟内)该函数将返回一个值。 如果它不返回承诺,那么这是等待返回的方式吗?

不是这样

您可以编写一个包装器函数,它返回一个承诺,并进行轮询,直到得到结果

然后,promise将调用您没有重复编写的函数(例如,使用
setInterval
),直到它返回一个值,然后将其传递给resolve

function wrap_function () {
    return new Promise(function (resolve, reject) {
         var interval = setInterval(function () {
             var result = the_origional_function();
             if (result) {
                 clearInterval(interval);
                 resolve(result);
             }
         }, 2000);
    });
}
(假设我在“几秒钟内”解释语句,该函数将“正确地”返回值)

并非如此

您可以编写一个包装器函数,它返回一个承诺,并进行轮询,直到得到结果

然后,promise将调用您没有重复编写的函数(例如,使用
setInterval
),直到它返回一个值,然后将其传递给resolve

function wrap_function () {
    return new Promise(function (resolve, reject) {
         var interval = setInterval(function () {
             var result = the_origional_function();
             if (result) {
                 clearInterval(interval);
                 resolve(result);
             }
         }, 2000);
    });
}

(假设我在“几秒钟内”解释语句,该函数将“正确地”返回值)

通常,您指定一个回调函数,该函数在函数完成后将被调用。我强烈建议不要将异步函数封装在带有一些难看的超时等的同步函数中。向我们展示您自己没有开发的实际异步代码,我们可以给出一个真正的答案。如果没有这些,我们所能做的就是猜测,任何“民意测验”的回应都是丑陋、低效的做事方式。我们需要查看实际的代码,以提出可靠的建议或正确的操作方法。通常,您指定一个回调函数,该函数完成后将被调用。我强烈建议不要将异步函数封装在带有一些难看的超时等的同步函数中。向我们展示您自己没有开发的实际异步代码,我们可以给出一个真正的答案。如果没有这些,我们所能做的就是猜测,任何“民意测验”的回应都是丑陋、低效的做事方式。我们需要看到实际的代码,才能提出可靠的建议或正确的方法。@GlassMan-不要这样做。这不是解决这个问题的正确方法。当您向我们展示包含异步操作的实际代码时,我们可以提供解决此问题的好方法。异步黑客是一团糟。不要使用它们。要生成可靠、可维护的代码,请学习以正确的方式解决异步问题,并且永远不要使用黑客。如果需要以正确的方式解决问题,请修改项目中其他人的代码。@GlassMan-不要这样做。这不是解决这个问题的正确方法。当您向我们展示包含异步操作的实际代码时,我们可以提供解决此问题的好方法。异步黑客是一团糟。不要使用它们。要生成可靠、可维护的代码,请学习以正确的方式解决异步问题,并且永远不要使用黑客。如果需要以正确的方式解决问题,请修改项目中其他人的代码。