gpt4 book ai didi

node.js - Node promise 延迟 10 秒然后返回自身?

转载 作者:搜寻专家 更新时间:2023-10-31 23:37:53 25 4
gpt4 key购买 nike

我正在使用 q 在我的项目中实现 promise,我想做这样的事情:

  1. 检查是否a >= 10,如果是则返回;
  2. 如果没有,再调用自己。

我的代码是错误的,但它可以帮助你理解我:

var Q = require("q");

function delay(ms) {
var deferred = Q.defer();
setTimeout(deferred.resolve, ms);
return deferred.promise;
}

function wait(a) {
var deferred = Q.defer();
if (a >= 10) {
deferred.resolve(a);
} else {
console.log("wait " + a);
delay(10).then(wait(a + 1)).then(deferred.resolve(a));
}

return deferred.promise;
}

wait(1).then(console.log); // what I want is 10 instead of 1

最佳答案

您正在解析 a在函数中。

delay(10).then(wait(a + 1)).then(deferred.resolve(a));

因为您的第一个函数调用是 wait(1) , 所以 a=1并将结果解析为 1 .

我稍微修改了一段代码。

你可以在代码中看到,你可以访问你放在 .then 中的函数中的解析值.你应该使用那个值,而不是原来的 a .

var Q = require("q");

function delay(ms) {
var deferred = Q.defer();
setTimeout(deferred.resolve, ms);
return deferred.promise;
}


function wait(a) {
var deferred = Q.defer();
if (a >= 10) {
deferred.resolve(a);
} else {
console.log("wait " + a);
delay(10).then(function () {
return wait(a + 1);
}).then(function (data) {
deferred.resolve(data);
});
}

return deferred.promise;
}

wait(1).then(console.log); // what I want is 10 instead of 1

关于node.js - Node promise 延迟 10 秒然后返回自身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com