gpt4 book ai didi

javascript - 如何使包含 Promise 的函数返回一个值而不是 Promise?

转载 作者:行者123 更新时间:2023-11-28 19:24:21 26 4
gpt4 key购买 nike

假设我有一个函数 F1,它将在许多其他函数中调用。 F1 旨在返回将在 F2 中使用的值 VAL。需要一个 Promise 来检索有助于计算 VAL 的所需数据。将 F1 作为 Promise 会在 F2 中引起很多困惑,因为 F1 通常在 IF 语句和 FOR 循环内调用。让我来说明一下这个场景:

function F1(param1, param2) {
var VAL = 0;

promise(param1, param2).then(function(data) {
for (var i = 0; i < data.length; i++) {
// Do some calculation here
}
});

return VAL;
}

function F2(x1, x2) {
var myArray = [],
someValue = 0;

if ([conditional expression]) {
someValue = F1(x1, x2);

call_some_function();

myArray.push({
val: someValue,
...
});
}

var x = someValue + y;

myArray.push({
id: x,
...
});

return myArray;
}

如何确保 F1 返回 VAL(整数),以便我可以将其用作同步函数?

预先感谢您的帮助。

编辑:

代码如下:

    function myFunc(x, y) {
return init()
.then(function() {
return getData(x, y).then(function(data) {
if (data.length == 0) return [];

var id, name,
firstPass = true,
headIn = 0,
headOut = 0,
currentHead = 0,
payWtIn = 0,
payWtOut = 0,
expectedAdg = 0,
weight = 0,
results = [];

for (var i = 0; i < data.length; i++) {
if (firstPass) {
id = data[i].id();
name = data[i].name();
headIn = data[i].headIn();
headOut = data[i].headOut();
expectedAdg = data[i].expectedAdg();
firstPass = false;
}

if (id != data[i].id()) {
buildFunc();
reset();
}

headIn += data[i].headIn();
headOut += data[i].headOut();
payWtIn += data[i].payWtIn();
payWtOut += data[i].payWtOut();
}

buildFunc();

return results;



function buildFunc() {
currentHead = headIn - headOut;

var headDays = getHeadDays({ locationId: locationId, groupId: groupId, callDate: null });

var totalWeight = headIn != 0
? ((((headDays * expectedAdg) + payWtIn) / headIn) * currentHead) + payWtOut
: 0;


results.push({
id: id,
name: name,
headIn: headIn,
headOut: headOut,
headDays: headDays,
currentHd: currentHead,
totalWt: totalWeight
});
}

function reset() {
id = data[i].id();
name = data[i].name();
headIn = data[i].headIn();
headOut = data[i].headOut();
expectedAdg = data[i].expectedAdg();
payWtIn = 0;
payWtOut = 0;
weight = 0;
}
});
});
}

function getHeadDays(params) {
var VAL = 0;

promise(params.a, params.b).then(function(data) {
for (var i = 0; i < data.length; i++) {
// Make calculation to determine VAL here
}
});

return VAL;
}

init函数加载缓存中所需的实体(我正在使用 BreezeJs)进行查询。 getData函数从数据库中获取按 id 排序的原始数据,这些数据用于确定 results大批。随着数据的循环,只要id每条记录的相同,headIn , headOut , payWtInpayWtOut按记录字段递增,当前一个和当前id不同时,我们可以计算totalWeight并将新记录推送到结果数组中 buildFunc功能。在该 buildFunc 函数中,我们检索 headDays以便计算totalWeightgetHeadDays函数将在许多其他函数中被调用。请让我知道,如果你有任何问题。预先感谢您的帮助。

最佳答案

你不能。

如果您需要返回一个promise,那么这是因为该值在某些事件发生之前才可用,并且该函数将(或至少可能)在此之前返回。这就是 promise 的重点。

关于javascript - 如何使包含 Promise 的函数返回一个值而不是 Promise?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28160811/

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