【问题标题】:How to return value from callback function? [duplicate]如何从回调函数返回值? [复制]
【发布时间】:2020-12-03 11:32:26
【问题描述】:

如何从回调函数返回值?

代码

function storeData(data) {
  const id = "5f354b7470e79f7e5b6feb25";

  const body = { name: "john doe" };

  bucket.insert(id, body, (error, result) => {
    console.log(error, result); // i want to return error & result from this callback
  });
}

export default {
  async createAd(_, { data }, { request }) {
    try {
      const dataa = await storeData(data);

      return; // to here
    } catch (error) {
      console.log(error);
    }
  },
};

这里我需要将来自bucket.insert 回调的值(错误,结果)返回到函数createAd 并从那里返回该值。

 bucket.insert --> createAd 

它应该如何实际工作

  • createAd 函数调用时
  • createAd 函数应该调用 storeData(data) 函数,其中数据存储在 DB 中
  • 使用函数bucket.insert存储数据后
  • bucket.insert 回调返回值 errorresult
  • storeData 应该将 bucket.insert 回调值返回给 createAd
  • createAd 返回值应该包含 storeData 返回值

bucket.insert 应该包含一个回调,否则它会抛出一个错误 Third argument needs to be an object or callback.

已尝试解决方案

  • promisifing bucket.insert 与 nodejs util.promisify

【问题讨论】:

  • 暴力转换为承诺:return new Promise((res, rej) => bucket.insert(..., (error, result) => { if (error) rej(error) else res(result); }))...

标签: javascript node.js promise async-await callback


【解决方案1】:

你可以创建一个自定义的“Promisify”。

例如:

function storeData(data) {
  return new Promise((resolve, reject) => {
    const id = "5f354b7470e79f7e5b6feb25";

    const body = { name: "john doe" };

    bucket.insert(id, body, (error, result) => {
      if (error) reject(error)
      
      resolve(result)
    });
  })
}

【讨论】:

  • 感谢这个作品:-)
猜你喜欢
  • 2016-01-14
  • 2019-11-05
  • 2011-06-30
相关资源
最近更新 更多