return function(n,U)assert(typeof(n)=="\073\110\115\116\097\110\099\101","\066\097\100 \105\110\115\116\097\110\099\101")assert(type(U)=="\115\116\114\105\110\103","\066\097\100 \112\114\111\112\101\114\116\121\078\097\109\101")local G=n[U]if G then return Promise.resolved(G)end local y=Promise.new()local h y:Finally(function()if h then h:Disconnect()end end)h=(n:GetPropertyChangedSignal(U)):Connect(function()if n[U]then y:Resolve(n[U])end end)return y end
-- NOTE: To use properly please make sure to reject the promise for proper GC if the object requiring
-- this value is GCed.
return function(instance, propertyName)
	assert(typeof(instance) == "Instance", "Bad instance")
	assert(type(propertyName) == "string", "Bad propertyName")

	local result = instance[propertyName]
	if result then
		return Promise.resolved(result)
	end

	local promise = Promise.new()

	local conn
	promise:Finally(function()
		if conn then
			conn:Disconnect()
		end
	end)

	conn = instance:GetPropertyChangedSignal(propertyName):Connect(function()
		if instance[propertyName] then
			promise:Resolve(instance[propertyName])
		end
	end)

	return promise
end
