【发布时间】:2025-12-22 20:35:13
【问题描述】:
我正在处理一个 Node.js 项目,但在使用 setTimeout 函数包装 Promise 函数时遇到问题。
我原来的Promise函数:
我想将此函数包装在对setTimeout() 的调用中,但在传递Promise 对象时遇到问题。我需要Promise 对象和setTimeout() 函数中可用的数据对象,但是当我将它们作为参数传递给setTimeout() 时,我仍然收到以下错误:
TypeError: 无法读取未定义的属性 'then'
我的代码:
return Promise.props(data).then(function (data) {
data.companies = data.order && data.order.companies;
if (!data.companies) {
data.companies = {};
data.companies[data.company.id] = data.company;
}
if (data.order) {
if (data.order.contactentry) {
data.order.pointofcontact = data.order.contactentry + ' ' + phone(data.order.contactentryphone);
} else if (data.order.borrowername) {
data.order.pointofcontact = data.order.borrowername + ' ' + phone(data.order.borrowerphone);
} else if (data.order.lockboxcode) {
data.order.pointofcontact = 'Lockbox ' + data.order.lockboxcode
}
}
if (data.part && data.order && data.part.vendor) {
var oid = data.order && data.order.id;
var vid = data.part && data.part.vendor && data.part.vendor.id;
if (!oid || !vid) {
var e = new Error('Could not assemble vendor accept url, order id or part vendor id are missing')
log.error({
error: e,
data,
}, e.message);
throw e;
}
}
return data;
});
当作为参数传入时,数据对象在函数内部可用,但Promise 对象不可用。
如何正确传递Promise 对象以使其在setTimeout() 中可用?
【问题讨论】:
-
为什么要用
setTimeout包裹Promise? -
您在
Promise之前缺少new关键字 -
@JosanIracheta - Promise.props 不需要
new:p - bluebirdjs.com/docs/api/promise.props.html -
ugh @McWayWeb - 在使用 Promise 返回之前,您正在使用延迟等待异步代码完成?严重地?您确实意识到
return Promise.props返回的承诺不会在任何地方返回,对吗?不知何故,我认为您似乎认为您可以使用 Promises 使异步代码同步(提示:您不能) -
顺便说一句,您的“也尝试过”代码是将参数传递给 setTimeout 回调的正确方法 - 但使用此类代码无法解决您的整体问题
标签: javascript node.js promise settimeout