node.js - 如何将异步 Node 函数转变为 Promise

标签 node.js promise

我有一个异步函数,我想把它变成一个 promise

    var myAsyncFunction = function(err, result) {
        if (err) 
            console.log("We got an error");


        console.log("Success");
    };

    myAsyncFunction().then(function () { console.log("promise is working"); });

我收到 TypeError: Cannot call method 'then' of undefined.

这段代码有什么问题?

最佳答案

various ways在问题中:

Q.nfcall(myAsyncFunction, arg1, arg2);
Q.nfapply(myAsyncFunction, [arg1, arg2]);

// Work with rusable wrapper
var myAsyncPromiseFunction = Q.denodeify(myAsyncFunction);
myAsyncPromiseFunction(arg1, arg2);

Deferred实现:

var myAsyncPromiseFunction = deferred.promisify(myAsyncFunction);
myAsyncPromiseFunction(arg1, arg2);

一个显着的区别:由 Deferred 生成的包装器另外自动解析作为参数传递的 promise ,因此您可以执行以下操作:

var readFile = deferred.promisify(fs.readFile);
var writeFile = deferred.promisify(fs.writeFile);

// Copy file
writeFile('filename.copy.txt', readFile('filename.txt'));

关于node.js - 如何将异步 Node 函数转变为 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19503612/

相关文章:

javascript - JavaScript Promise 如何在幕后工作

javascript - Promise.all 不等待函数完成

javascript - 使用 .catch() 处理未处理的 Promise 拒绝

javascript - 递归、Node js 和异步调用

javascript - 是否可以在没有 webview 的情况下从 android 调用方法 javascript?

javascript - Mongoose 在通过 Browserify 加载时没有连接方法

javascript - NodeJS 中的递归异步循环

node.js - Node 命令选项未定义

javascript - 如何从 .NET 5 应用程序使用 observablehq/plot?

javascript - node.js redis 以及在使用模块时如何使用 promise