首页 > 解决方案 > 我想知道在执行下一行代码之前如何等待返回函数发送数据

问题描述

我的代码(Node.js)有点问题。我想要 2 个文件 app.js 和 state.js,我基本上创建了这两个文件来尝试解决我遇到的问题。

在第二个文件“State.js”上,我有一个返回对象的函数,我将返回延迟了 10 秒(印象中的互联网速度很慢等)。我正在尝试检索 app.js 文件中的对象。但目前,它不起作用。我尝试使用 promise (async & await) 但在终端上返回错误,我还尝试运行 setInterval 来监视变量 i 用于检索对象以仅在它有数据时执行,但这不起作用也是。请尽快帮助我。

下面是 2 场景的代码示例。

============================ state.js 文件=================== ====

function test(val){
    setTimeout(() => {
        return {
            code: 0,
            value: val
        }
    }, 10000);
}

module.exports = test;

=========================== app.js文件(使用promise方式)============== ===============

async function runNow(){
    let v = await t('some string');
    console.log(v.value)
}

runNow();

================================== app.js(使用区间方法)======= ===

function runNow(){
    let engine = setInterval(() => {
        let v = t('some string');
        if(v === null || v === undefined){
            console.log(v);
        }else{
            clearInterval(engine);
            console.log(v.value);
        }
    }, 5000);
    // console.log(v.value);
}

runNow();

标签: javascriptnode.js

解决方案


您必须使用承诺或回调来完成您想要在这里做的事情。

如果我从它的功能中返回一些东西,callback实际上 setTimeout(callback, time)并没有被功能返回setTimeout

的实现setTimeout可能类似于这样的东西。

function setTimeout(callback, time, ...args) {
    // After the given time it executes the callback
    callback(...args);
}

state.js 文件的期望实现如下所示:

function testWithPromise(val) {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve({
        code: 0,
        value: val,
      });
    }, 5000);
  });
}

function testWithCallback(val, callback) {
  setTimeout(() => {
    callback({
      code: 0,
      value: val,
    });
  }, 3000);
}

// export the function


// use it in other modules as
testWithCallback("callback_approach", console.log);
testWithPromise("promise_approach").then(console.log);

// or with an async function
async function getValue() {
  const value = await testWithPromise("async_promise");
  console.log(value);
}

//getValue();


推荐阅读