Bluebird Promise 警告:.then 只接受函数但已通过

Seb*_*iuc 5 node.js promise bluebird

使用"bluebird": "^3.4.6"

var Promise = require('bluebird');

Promise.config({
    warnings: true,
    longStackTraces: true,
    cancellation: true,
    monitoring: true
});


function getPromise1(param1, param2) {
    return new Promise( (resolve, reject) => { 
        console.log(param1, param2); 
        resolve();
    } );
}

function getPromise2(param1, param2) {
    return new Promise( (resolve, reject) => { 
        console.log(param1, param2);
        resolve();
    } );
}


function mainFunc(param1, param2) {
    getPromise1(param1, param2)
        .then(getPromise2(param1, param2));
}

mainFunc("param1", "param2");
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

$ node index.js
param1 param2
param1 param2
(node:95984) Warning: .then() only accepts functions but was passed: [object Object]
Run Code Online (Sandbox Code Playgroud)

如何在没有警告的情况下修改这段代码来做同样的事情?这个警告是相关的还是只是对开发人员的提醒?

编辑:是的。我理解警告的文本​​,即.then当它实际PromisegetPromise2函数中获取一个对象时期望一个函数。然而,承诺被调用。(有用的反对票)

我的困境是如何以这样的方式链接承诺,即在第一个承诺执行后会在函数中调用一个新的承诺then

Ber*_*rgi 5

getPromise2()呼叫将立即创建承诺; 然后它会被忽略,then而不是传递给回调。要实际链接它们,您需要使用

function mainFunc(param1, param2) {
    return getPromise1(param1, param2).then(function(promise1result) {
        return getPromise2(param1, param2);
    });
}
Run Code Online (Sandbox Code Playgroud)