【问题标题】:Node await not waiting for promise节点等待不等待承诺
【发布时间】:2019-12-10 01:44:31
【问题描述】:

我有一个承诺,我正在尝试等待,但它不起作用。

这是我的方法:

async function lookupAndAddManager(id, record, fieldNameToAdd) {
    console.log(`Searching ${id}`);
    let promise = ups.getSearchResults(ups.Environment.Prod, ups.SearchConfig.Email, ups.emailFromId(id))
    console.log("Promise", promise)
    let response = await promise;
}

我这样称呼它:

lookupAndAddManager(row.BPO, row, 'BPO_MGR')

我的输出是:

搜索 CN=Name/OU=TEST/O=EXAMPLE

承诺承诺{}

但是,该方法会立即返回,await promise 不会等待 promise 被解析。

为什么不呢?

我调用的方法也是异步的:

export const getSearchResults = async (env: Environment, searchConfig: SearchConfig, query: string): Promise<ISearchResult> => {
    return new Promise((resolve, reject) => {
        ... resolve/reject as appropriate ...
    });
};

【问题讨论】:

  • await lookupAndAddManager(row.BPO, row, 'BPO_MGR') 你也应该这样称呼它。它返回一个承诺。
  • 这是一个异步方法,所以,当然,它会立即返回...除非您在调用它的函数中也等待lookupAndAddManager。这就是异步的工作原理。
  • 只是为了确认您正在使用 await 来调用您的异步函数 lookupAndAddManager,对吧?
  • 不,我从我的主入口点调用lookupAndAddManager,所以它不是从异步方法调用的。在某些时候,我必须从非异步方法调用该方法

标签: javascript promise async-await nodes


【解决方案1】:

还有其他问题。我模拟了你的代码,等待工作正常。

async function lookupAndAddManager(id, record, fieldNameToAdd) {
    console.log(`Searching ${id}`);
    let promise = getSearchResults();
    console.log("Promise will be promised and then wait 3 seconds, now its just unresolved promise object", promise)
    let response = await promise;
    console.log("After 3 seconds, we got response", response);
}

const getSearchResults = async (env, searchConfig, query) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => resolve('Yeeey, resolved'), 3000);
    });
};

lookupAndAddManager(10);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-29
    • 2017-11-01
    • 1970-01-01
    • 2013-09-16
    • 2018-02-03
    • 2018-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多