then()如何提供其参数

时间:2015-08-19 05:17:22

标签: javascript promise q

试图围绕Javascript承诺。我正在试验Q库。我有一些代码可以输出我期望的内容,但我不确定它是如何工作的:

'require strict';

var Q = require("q");

function getFirst(){
    var deferred = Q.defer();
    var first = 5;
    console.log("getting first: " + first);
    deferred.resolve(first);
    return deferred.promise;
}

function addSecond(first){
    var deferred = Q.defer();
    var second = 10;
    console.log("adding second: " + second);
    var result = first + second;
    deferred.resolve(result);
    return deferred.promise;
}

function printResult(result) {
    console.log("result is + " + result);
}

getFirst()
.then(addSecond)
.then(printResult);

在Node i中运行它:

getting first: 5
adding second: 10
result is + 15

我很困惑的是addSecond和printResult在最终被调用时如何获取它们的参数? '5'是如何神奇地将它变成addSecond的?如果addSecond需要一大堆参数怎么办?

感谢您对此有所了解。

4 个答案:

答案 0 :(得分:1)

addSecond获取其参数:

deferred.resolve(first);

因此值为5

printResult获取其参数:

var result = first + second;
deferred.resolve(result);

因此值为first + second

你可以试试这个。将要传递给您的函数的值传递到.resolve()并查看其中的更改。基本上,.resolve就像是指向传递给.then()的函数的指针。

答案 1 :(得分:1)

您添加到deferred.resolve([params])的任何参数都将发送到延迟函数或DoneCallback(函数在.then(函数)中指示)。 它接受多个参数(https://api.jquery.com/deferred.resolve/)。

答案 2 :(得分:0)

当你调用一个promise时它会等到底层函数“解析”,然后调用next函数传递已解析的值作为参数(这个值在deferred.resolve(first)上解析)。然后新函数是否返回一个promise重复循环,否则只需调用next函数传递返回值。

如果需要传递多个参数,可以返回一个数组。

很好的承诺:

答案 3 :(得分:0)

您的addSecond代码可以简化为

function addSecond(first){
    var second = 10;
    console.log("adding second: " + second);
    return first + second;
}