【问题标题】:How can we use promise in node.js packages [closed]我们如何在 node.js 包中使用 promise [关闭]
【发布时间】:2016-09-22 03:36:34
【问题描述】:

当我们为 node.js 编写模块时,我们使用回调函数。我在 javascript 中学习了 Promise,我想在 node.js 模块中使用。我们可以使用 Promise 代替回调函数吗?如果可以,怎么做?

注意:通过节点模块文件中的函数(你知道exports.some_func),我们做一些事情,我们可以用回调发回信息。我们可以使用 Promise 代替回调吗?

【问题讨论】:

  • Promise.resolve 和关于thenables 的好教程开始...
  • 你的问题很模糊。您是想在现有函数(如 require('fs').readFileAsync)上调用 Promise.then,还是要编写自己的 Promises?
  • 通过节点模块文件中的函数(你知道exports.some_func),我们做一些事情,我们可以用回调发回信息。我们可以使用 promise 代替回调吗?
  • 听起来你想将回调包装在一个承诺中。这可以通过 Q 库轻松完成。看看strongloop.com/strongblog/…。具体参见创建原始承诺的示例。
  • 我们可以用 promise 发回数据吗?

标签: javascript node.js promise package


【解决方案1】:

我们可以使用 Promise 代替回调吗?

是的,您可以只返回一个 Promise 并确保在异步操作完成时以正确的值/原因解析/拒绝该 Promise,而不是在导出的函数中接受回调。

这是一个例子:

假设您有一个模块接口用于读取文件,那么您可以让该接口返回如下承诺:

// myFileModule.js
const fs = require('fs');

module.exports.getFile = function(filename, options) {
    return new Promise(function(resolve, reject) {
        fs.readFile(filename, options, function(err, data) {
            if (err) return reject(err);
            resolve(data);
        });
    });
}

然后调用者会这样使用它:

const myFiles = require('myFileModule.js');

myFiles.getFile('temp.txt').then(function(data) {
    // process data here
}, function(err) {
    // got an error here
});

【讨论】:

  • 感谢您的评论。太好了。
  • @hasan - 如果这回答了您的问题,请通过单击答案左侧的绿色复选标记向社区表明这一点。这也将为您在堆栈溢出时遵循正确的程序赢得一些声誉积分。如果它没有回答您的问题,请说明您的问题的哪一部分您仍然不明白。
猜你喜欢
  • 2016-12-19
  • 2019-06-22
  • 2021-03-29
  • 2013-05-25
  • 2014-05-10
  • 2014-04-16
相关资源
最近更新 更多