异步函数后返回值

Returning value after async function

本文关键字:返回值 函数 异步      更新时间:2023-09-26

我无法弄清楚如何将值从uniqueCheck()返回到isValid。我添加了 setTimeout 来模拟异步操作。

function isValid(data) {
    uniqueCheck(data, function(val) {
        return val;
        //true
    });
    // need the value here
}
function uniqueCheck(data, cb) {
    // do something with data async
    setTimeout(function () {
        cb(true)
    }, 1000);
}
console.log(isValid("some data"));

要在代码中使用异步调用,您可以使用 Promises,或者例如,如果您使用 jQuery,则可以使用 Deferred 对象。

//async function using $.Deferred
function asyncFunction(){
    var dd = $.Deferred();
    setTimeout(function(data) {
        dd.resolve('loaded');
    }, 500);
    return dd.promise();
}
//somwhere in your code
asyncFunction().then(function(value){
    //do stuff when Deferred object is resolved
    //value = 'loaded'
})

在您的代码中:

function isValid(data) {
  uniqueCheck(data).then(function(){
    //value is available here
  });
    // but not here
    //because this code is executed earlier then callback
}
function uniqueCheck(data, cb) {
var dd = $.Deferred();
    // do something with data async
    setTimeout(function () {
        cb(true)
    }, 1000); 
 return dd.promise();
}
你必须

通过回调函数返回结果

function isValid(data, callback) {
    uniqueCheck(data, function(val) {
       callback(true);
        return val;
        //true
    });
    // need the value here
}
function uniqueCheck(data, cb) {
    // do something with data async
    setTimeout(function () {
        cb(true)
    }, 1000);
}
//console.log(isValid("some data"));
isValid("some data", function(value){
    console.log(value);
});